анализ csv (данные заключены в кавычки) с использованием fgetcsv () не работает должным образом - PullRequest
3 голосов
/ 28 ноября 2011

Я пытаюсь проанализировать CSV-файл, в котором мои данные представлены в формате, например:

"Total","Shazam (DE)","Total",,"215,611","538","£935.97","£60.77"

Теперь, если я дам fgetcsv (), как показано ниже:

$values = fgetcsv($f,8098);

Он возвращает мне массив в виде:

array(9) {
  [0]=>
    string(15) ""Total""
  [1]=>
    string(27) ""Shazam (DE)""
  [2]=>
    string(15) ""Total""
  [3]=>
    string(1) ""
  [4]=>
    string(9) ""215"
  [5]=>
    string(9) "611""
  [6]=>
    string(11) ""538""
  [7]=>
    string(19) ""£935.97""
  [8]=>
    string(19) ""£60.77"
 "
 }

, но теперь, если я дам выражение if, подобное:

 $values = fgetcsv($f,8098);
 if ($values[0] == "Total")
   echo "Hello";

, это ничего не выводит, почему условие не выполняется?Это как-то связано с кавычками?

Я даже пытался экранировать кавычки, например.

 if ($values[0] == '\"Total\"')
   echo "Hello";

, но безрезультатно.

Нужно ли мне изменять какие-либо настройки .ini для этого?Пожалуйста, помогите мне.

РЕДАКТИРОВАТЬ: я пытался сделать var_dump, и он действительно показал мои значения в кавычках:

 array(9) {
  [0]=>
   string(15) ""Total""
 [1]=>
   string(27) ""Shazam (DE)""
 [2]=>
   string(15) ""Total""
 [3]=>
   string(1) ""
 ...
}

, но даже

$values[0] == "\"Total\""

не работал,Каким должен быть правильный компаратор?

ОБНОВЛЕНИЕ: После нескольких часов бесцельных проб и ошибок, наконец, нашел что-то раздражающее, но это решило мою проблему.

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

Старый файл красиво открывался в MS-EXCEL / NOTEPAD, но вExcel, каждая строка отображалась внутри одной ячейки.

Мой вопрос: в чем проблема с .csv fromat?Кто-нибудь сталкивался с такой проблемой раньше?

1 Ответ

2 голосов
/ 28 ноября 2011

Я думаю, вам нужно определить квалификатор текста, это называется вложением в fgetcsv . например:

$values = fgetcsv($f,8098,'"'); 
// the last part is: singlequote doublequote singlequote,
// you could also use an escape "\"" 

Это означает, что парсер не должен брать запятую внутри текстовой области.

Вы должны быть в состоянии сделать:

$values[0] == '"Total"'

UPDATE:

У вас проблема со странным открытием файла, вероятно, связана с кодирование файлов, создав новый файл, вы создали его с новым возможно, в кодировке ANSI / UTF-8 / Unicode что-то, чего не было в исходном файле, а затем скопировал туда содержимое, так что теперь он был сохранен в этом формате вместо этого. Я не уверен, почему это вызовет у вас проблемы, но я предположим, что синтаксический анализатор не может обработать неправильную кодировку.

попробуйте открыть блокнот и заметить, когда вы нажимаете сохранить как, вы можете выбрать кодировку в нижней части, попробуйте несколько разных файлов с другой кодировкой, если вы хотите убедиться, что это было?

...