Чтение файлов *.csv из каталога и отображение содержимого каждого файла не удается

Мне нужна помощь с чтением папки и открытием/выводом данных csv, я использовал примеры, написанные другими людьми, но ни один из них не работал у меня.

В настоящее время у меня есть это, но он не выводит файлы:

$files = scandir($PathToCreate.$version."/"); //scan the folder
foreach($files as $file) { //for each file in the folder

//The following is another example I found but does not output anything I just need to open each file and be able to output / target specific data

$csv = array();
$lines = file($file, FILE_IGNORE_NEW_LINES);

foreach ($lines as $key => $value)
{
    $csv[$key] = str_getcsv($value);
} 
print_r($csv)

}

person Dgeorgex000000    schedule 13.04.2015    source источник
comment
Какой разделитель имеет ваш файл csv?   -  person Rizier123    schedule 13.04.2015
comment
ни один из них не работал, не помогает. В чем твоя проблема?   -  person arkascha    schedule 13.04.2015
comment
Он использует запятые для разделения информации   -  person Dgeorgex000000    schedule 13.04.2015
comment
И какой результат вы получаете прямо сейчас и чего бы вы ожидали?   -  person Rizier123    schedule 13.04.2015
comment
Кстати: взгляните на функцию fgetcsv(): php.net/manual/en/function. fgetcsv.php   -  person arkascha    schedule 13.04.2015
comment
Извините, я новичок в переполнении стека, моя проблема в том, что при использовании каталога сканирования он правильно показывает правильное количество и имена файлов, но я не могу успешно прочитать каждый файл и собрать данные/использовать данные, это выходит за рамки моих возможностей и когда другие люди ответили на эту проблему из разных источников, ни одно из решений не сработало для меня, так как когда я повторяю код, ничего не происходит.   -  person Dgeorgex000000    schedule 13.04.2015
comment
Вы до сих пор не сказали, в чем настоящая проблема. Я не могу это расплывчато снова. Какая у вас ошибка? Что случается? Не заставляйте нас вытаскивать все детали из вашего носа! :-)))   -  person arkascha    schedule 13.04.2015
comment
Хорошо, извините еще раз, для лучшего примера я взял фрагмент из школ w3, который должен дать базовый пример того, что я пытаюсь сделать, поэтому теперь мой код читает '$files = scandir($PathToCreate.$version./); foreach($files as $file) { $csvfile = fopen($file,r); print_r (fgetcsv ($ csvfile)); fclose($csvfile); }', который должен печатать строки, но все, что я получаю, это пустой экран   -  person Dgeorgex000000    schedule 13.04.2015
comment
Зачем вы примерами к нам кидаете? Скажите, в чем проблема с приведенным выше кодом. Каков результат? Вы не сказали! Какую ошибку вы получаете? Что говорит файл журнала ошибок http-сервера?   -  person arkascha    schedule 13.04.2015
comment
Моя проблема в том, что он не отображает никаких данных, ничего не выводится, все, что мне нужно сделать, это вывести информацию, и ничего не происходит.   -  person Dgeorgex000000    schedule 13.04.2015
comment
Еще раз: какие ошибки вы получаете, особенно в файле журнала ошибок? Я настаиваю, потому что вы хотите научиться отлаживать себя. Для этого вам нужно выяснить фактическую ошибку, с которой вы имеете дело. Вам придется научиться отлаживать себя.   -  person arkascha    schedule 13.04.2015


Ответы (2)


Это должно сработать для вас:

(Здесь я сначала беру все файлы из каталога, которые имеют расширение *.csv с glob() После этого я перебираю каждый файл и читаю его с помощью fopen() и fgetcsv().)

<?php

    $files = glob("$PathToCreate$version/*.csv");

    foreach($files as $file) {

        if (($handle = fopen($file, "r")) !== FALSE) {
            echo "<b>Filename: " . basename($file) . "</b><br><br>";
            while (($data = fgetcsv($handle, 4096, ",")) !== FALSE) {
                echo implode("\t", $data);
            }
            echo "<br>";
            fclose($handle);
        } else {
            echo "Could not open file: " . $file;
        }

    }

?>
person Rizier123    schedule 13.04.2015
comment
Omg, это прекрасно, спасибо, есть ли способ настроить таргетинг на определенные данные по их заголовку? - person Dgeorgex000000; 13.04.2015
comment
@Dgeorgex000000 Добро пожаловать! (есть ли способ настроить таргетинг на конкретные данные по их заголовку Что именно вы имеете в виду?) - person Rizier123; 13.04.2015
comment
Каждая строка данных в csv находится под заголовком/заголовком, есть ли простой способ выбрать данные только из определенных заголовков, например, только информацию в строке 4 или только информацию под заголовком xxx - person Dgeorgex000000; 13.04.2015
comment
@Dgeorgex000000 Вместо: echo implode("\t", $data); сделать echo $data[3]; Вы это имеете в виду? - person Rizier123; 13.04.2015
comment
Это был один огненный сексуальный торнадо ответа, не мог быть более совершенным, спасибо большое - person Dgeorgex000000; 13.04.2015

Первая проблема, вероятно, заключается в том, что вы должны игнорировать две записи каталога . и .., которые имеют особое значение и бесполезны для вас:

$files = scandir($PathToCreate.$version."/"); //scan the folder
foreach($files as $file) { //for each file in the folder
  if ( ! in_array($file, ['.','..'])) {
    $lines = file($file, FILE_IGNORE_NEW_LINES);
    foreach ($lines as $key => $value) {
      $csv[$key] = str_getcsv($value);
    } 
    print_r($csv)
  }
}
person arkascha    schedule 13.04.2015
comment
1. Проверять для каждого файла, не является ли он ни ., ни .. для всего цикла не очень понятно 2. $csv = fgetcsv(); что? - person Rizier123; 13.04.2015
comment
@ Rizier123 о 2: извините, случайно вставил :-( Спасибо, что указали на это. - person arkascha; 13.04.2015
comment
@ Rizier123 О 1: не очень понятно? Конечно, есть многопользовательские способы сделать это, вы используете glob, тоже хорошо. А что непонятного в этом условии? - person arkascha; 13.04.2015
comment
Допустим, у нас будет 10k файлов. Тогда не очень умно проверять каждый файл, если это не . и не .., вам лучше отфильтровать их перед циклом с array_diff(), и это также поможет производительности! - person Rizier123; 13.04.2015
comment
@Rizier123 Rizier123 Я сомневаюсь, что здесь проблема :-) ОП упомянул загруженные файлы. Он был бы очень занят, чтобы загрузить 10k файлов :-) Но с теоретической точки зрения вы правы. - person arkascha; 13.04.2015