PHP - fgetcsv - разделитель игнорируется? - PullRequest
1 голос
/ 03 апреля 2010

Я пытаюсь вывести каждую строку в CSV-файл, и кажется, что разделитель игнорируется ... Я уверен, что мой синтаксис где-то не так, но не могу точно определить его ...

CSV-файл выглядит следующим образом:

ID,Code,Count
TM768889,02001,10
TM768889,02002,10
TM768889,02003,10
TM768889,02004,10
TM768889,02005,10

Я пытаюсь вывести:

   0 - ID,Code,Count
   1 - TM768889,02001,10
   2 - TM768889,02002,10
   3 - TM768889,02003,10
   4 - TM768889,02004,10
   5 - TM768889,02005,10

Но вместо этого он выводит:

0 - ID
1 - Code
2 - Count TM768889
3 - 02001
4 - 10 TM768889
5 - 02002
6 - 10 TM768889
7 - 02003
8 - 10 TM768889
9 - 02004
10 - 10 TM768889
11 - 02005
12 - 10

Вот мой код:

  $row = 0;
  if(($handle = fopen($_FILES["Filedata"]["tmp_name"], "r")) !== FALSE) {
              $string = '';
              while(($line = fgetcsv($handle,1000,",")) !== FALSE) {
                    $num = count($line);
                    $row++;
                    for($c=0; $c < $num; $c++) {
                              $string .= $c.' - '.$line[$c].'<br />';
            }
          }     
  fclose($handle);
  echo $string;
  }

Ответы [ 2 ]

1 голос
/ 03 апреля 2010

Во-первых, ваш код не печатает то, что вы вставили. Счетчик не соответствует переменной $ c.

Вот что я получаю:

0 - ID
1 - Code
2 - Count
0 - TM768889
1 - 02001
2 - 10
0 - TM768889
1 - 02002
2 - 10
0 - TM768889
1 - 02003
2 - 10
0 - TM768889
1 - 02004
2 - 10
0 - TM768889
1 - 02005
2 - 10

Если ваш файл данных не очень большой, я советую вам загрузить файл в массив с помощью функции file (). Затем вы можете выполнить цикл по массиву и вывести значение, представляющее собой просто строку.

$lines=file($_FILES["Filedata"]["tmp_name"]);
foreach($lines as $line) print($line.'<br/>');

Если вам необходимо проанализировать строку, просто используйте функцию explode (), чтобы получить каждое значение.

1 голос
/ 03 апреля 2010

Зачем беспокоиться с fgetcsv? Вы просто берете строку и выплевываете ее обратно, так что кажется, что вы можете просто использовать fgets вместо:

  $row = 0;
  if(($handle = fopen($_FILES["Filedata"]["tmp_name"], "r")) !== FALSE) {
              $string = '';
              while(($line = fgets($handle)) !== FALSE) {
                    $row++;
                    $string .= $row.' - '.$line.'<br />';
            }
          }     
  fclose($handle);
  echo $string;
  }

Ваша проблема в том, что вы печатаете полную строку для каждого значения в CSV-файле, а не строку в целом, как вы предполагаете.

...