php & csv: некоторые операции со столбцами - PullRequest
0 голосов
/ 12 августа 2011

Мой CSV выглядит так:

column1_row1;column2_row1;column3_row1;column4_row1;... column15_row1
column1_row2;column2_row2;column3_row2;column4_row2;... column15_row2
column1_row3;column2_row3;column3_row3;column4_row3;... column15_row3

Теперь для каждой строки я должен найти:

  1. Где столбец 12 содержит только "слово"
  2. Если значение столбца 10 IF>> = 5% значения столбца 8

В первой строке:

  1. Найдите в таблице базы данных «альфа» соответствующий ссылочный номер, содержащийсяв столбце 4
  2. Вставить некоторые данные (строки) с определенными атрибутами (например, правильный id_number и относительный% в формате 0,230000 для 23%) в таблицу «бета» (на основе другого идентификатора столбца)

Вставить, обновить и, в конце концов, удалить: не только выполнить ту же процедуру, но также проверить и зарегистрировать процентные изменения и удалить соответствующую строку с id_number, если изменение (> = 5%) больше не проверяется.

edit:

Я нашел что-то вроде этого:

$file_handle = fopen("filename.csv", "r");

while (!feof($file_handle) ) {

$line_of_text = fgetcsv($file_handle, 1024);

print $line_of_text[0];

}

fclose($file_handle);

Но если он встречает запятую, он усекается, и я должен избегать, тогда должендоступ к значениям столбца, мне не нужна вся строка, и какой размер вместоf 1024 вы предлагаете, если CSV содержит много длинных текстовых описаний?

1 Ответ

1 голос
/ 22 августа 2011

Ваш пример csv разделен точкой с запятой (вместо запятой), поэтому вам нужно изменить fgetcsv на:

$line_of_text = fgetcsv($file_handle, 1024, ';'); 

Из руководства по PHP для fgetcsv :

длина

Это стало необязательным в PHP 5. Пропуск этого параметра (или установка его в 0 в PHP 5.0.4 и более поздних версиях) не ограничивает максимальную длину строки, которая немного медленнее.

Это сделает вашу строку похожей на:

$line_of_text = fgetcsv($file_handle, 0, ';'); 

Даже если вам не нужна вся строка из файла, вы все равно получите ее, потому что именно так работает fgetcsv.

Этот массив имеет нулевую индексацию, поэтому ваш column1 будет в позиции 0.

Если у вас есть строка, вы можете использовать необходимые поля, такие как:

if ($line_of_text[11] == 'word')
    // do something

if (($line_of_text[7] - $line_of_text[9]) / $line_of_text[9] >= 0.05)
    // do something
...