Четенето на *.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
О, това е идеално, благодаря, има ли начин да насочите конкретни данни по заглавката им? - 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 Съмнявам се, че това е проблем тук :-) ОП спомена качени файлове. Той би бил много зает да качи 10k файла :-) Но от теоретична гледна точка сте прав. - person arkascha; 13.04.2015