Чтение Excel csv с использованием PHP Обрезаны строки

Когда я читаю CSV (с PHPExcel, из fgetcsv ()), я хочу импортировать, в моей базе данных строки обрезаются.

1 fields in line 1: 
  ProCatId;CatName;CatDescription;CatNameisactive;CatNameiswebactive;ProSubCatId;SubCatName;SubCatDesc;SubcatWebDiscription2;SubcatWebDiscription3;SubcatCatName;SubcatSequencenr;SubCatNameisactive;SubCatNameiswebactive;DisplayMode;ProductId;ProductName;ProductDescription;ProductCatName;ProductSubCatName;Express;NextDayDelivery;Sequencenr;Drukvorm;Afwerking;BreedteDrukwerk;HoogteDrukwerk;Papier;PrinterName;PrinterProductCode;WebDescription;WebDescription2;WebDescription3;DeliveryInfo;NextDayPrice;NextDayTransferPrice;NextDayCostPrice;Meta-Keywords;Meta-Description;URL-Trefwoorden;Titel;Filepath_icons;Format;MaterialType;NoOfPages;PrintFront;PrintBack;BleedTop;BleedBottom;BleedLeft;BleedRight;MINH;MAXH;MINW;MAXW;De
1 fields in line 2: 
  liveryScheduleId;DeliveryScheduleName;CentralProductDetailId;ClaimsId;ClaimsName;DruktechniekenId;DruktechniekenName;Verzameld op;Vast;Variabel;vorm;"prijs
1 fields in line 3: 
  drukken

Предполагается, что все эти поля находятся в строке 1. Когда я использую функцию php file_get_contents (), содержимое выглядит корректным. Загрузка файла в Excel тоже не вызывает проблем.

Я использую следующий код (, разделенный):

<?php 
if (($handle = fopen($inputFileName, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>

person Dyam    schedule 25.02.2016    source источник
comment
я пробую слепой комментарий .. заменить; с участием ,   -  person Luca Giardina    schedule 25.02.2016


Ответы (1)


Давайте посмотрим, что говорится в документации:

array fgetcsv ( 
        resource $handle 
        [, int $length = 0 
        [, string $delimiter = ","
        [, string $enclosure = '"'
        [, string $escape = "\" ]]]] )

Вы проезжаете $handle, хорошо.

Вы говорите «отрезать строку на 1000 символов» - с вашими данными это может стать проблемой, рассмотрите более высокий предел (8000?)

И вы говорите «поля разделены ,». Похоже, они на самом деле разделены ;. Может, это тоже часть проблемы?

(Кроме того, fgetcsv не является двоично-безопасным, поэтому, если ваши данные не являются обычным ASCII, см. этот вопрос.)

person Piskvor left the building    schedule 25.02.2016
comment
Когда я использую следующее вместо fgetcsv (). while (($ raw_data = fgets ($ handle, 100000))! == FALSE) {, первые две строки равны единице. Но все равно отрезает третий. - person Dyam; 26.02.2016