2016-10-12 9 views
2

Вот текущий формат файл CSV Я разборудалить двойные кавычки из поля

"Street","City","Country" 
"House # 3, Street "23, H, Block". Building 32", "CityName", "Country" 

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

while (! feof($file)) { 
    // provide last parameter so in case we get \ in a field it 
    // doesn't break the data 
    $row = fgetcsv($file, null, ",", '"', '"'); 
    // so we don't send anything besides array 
    if (count($row) > 0) { 
     // if array is empty we don't pass it to further proceeding 
     if ($row) { 
      $sorted[] = array_merge($rows, $row); 
     } 
    } 
} 

разбор делит 23, h и Block в различные элементы в то время как они должны быть одним

Это то, что происходит

array:2 [▼ 
    0 => array:3 [▼ 
    0 => "Street" 
    1 => "City" 
    2 => "Country" 
    ] 
    1 => array:5 [▼ 
    0 => "House # 3, Street 23" 
    1 => " H" 
    2 => " Block". Building 32"" 
    3 => "CityName" 
    4 => "Country" 
    ] 
] 

В то время как я хочу, как этот

array:2 [▼ 
    0 => array:3 [▼ 
    0 => "Street" 
    1 => "City" 
    2 => "Country" 
    ] 
    1 => array:3 [▼ 
    0 => "House # 3, Street 23, H, Block. Building 32" 
    1 => "CityName" 
    2 => "Country" 
    ] 
] 

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

+3

Если у Вас есть кавычки внутри поля, они должны быть экранированы , Исправьте программу, которая создает файл. – Barmar

+0

oops, я не создаю файл, поэтому я пытаюсь найти хак, чтобы это сделать - что-то вроде '' 'file_get_content()' '' найти дополнительную цитату, удалить их, а затем использовать '' 'file_put_content()' '' перепишите файл и затем проанализируйте его. – Muhammad

+0

Вы можете использовать регулярное выражение для соответствия котировкам, которые не являются рядом с запятой или началом/концом строки, и удалять их. – Barmar

ответ

1

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

Блок Ограничитель имеет форму "," или ", " Таким образом, регулярное выражение для разделения линии будет

(?<="),\s*(?=") 

См DEMO с регулярных выражений объяснения

Смежные вопросы