Регулярное выражение для парсинга CSV в PHP

Вам необходимо отписаться от события в OnDisappearing

protected override void OnDisappearing() 
{ 
    base.OnDisappearing(); 

    MessagingCenter.Unsubscribe<UploadImagePopupPage>(this, "complete"); 
} 
7
задан disc0dancer 22 January 2009 в 19:34
поделиться

5 ответов

Существует функция для чтения файлов CSV: fgetcsv

21
ответ дан 6 December 2019 в 05:56
поделиться

Вот моя быстрая попытка его, хотя это будет только работать над границами слова.

preg_replace('/([\W]){2}\b/', '\1', $csv)
0
ответ дан 6 December 2019 в 05:56
поделиться

Почему Вы потрудились разделять файл с regex, когда существует функция fgetcsv, которая делает всю тяжелую работу для Вас?

Можно передать в разделителе и разделителе, и он обнаружит, что сделать.

4
ответ дан 6 December 2019 в 05:56
поделиться

Я соглашаюсь с другими, кто сказал, что необходимо использовать функцию fgetcsv вместо regexes. regex может работать хорошо над правильно построенными данными CSV, но если CSV будет уродлив или поврежден, то regex тихо перестанет работать, вероятно, возвращая поддельные результаты в процессе.

Однако вопрос был конкретно о разделении нежелательных кавычек после начального разделения. Одно предлагаемое решение (до сих пор) слишком наивно, и оно только имеет дело завершенные кавычки в поле, не фактические разделители. (Я знаю, что OP не спрашивал о тех, но они должны быть удалены, итак, почему бы не их в том же как другие?) Вот мое решение:

$csv_field = preg_replace('/"(.|$)/', '\1', $csv_field);

Этот regex соответствует кавычке, сопровождаемой любым символом или к концу строки, и заменяет подобранный символ (символы) вторым символом, или пустой строкой, если это было $ это соответствовало. Согласно спецификации, поля CSV могут содержать разделители строки; этого, кажется, не происходит очень, но можно добавить' модификатор к regex, если Вы должны.

2
ответ дан 6 December 2019 в 05:56
поделиться

Для тех из вас, кто не хочет использовать регулярное выражение вместо fgetcsv. Вот полный пример того, как создать таблицу html из csv с помощью регулярного выражения.

    $data = file_get_contents('test.csv');
    $pieces = explode("\n", $data);

    $html .= "<table border='1'>\n";
    foreach (array_filter($pieces) as $line) {

            $html .= "<tr>\n";
            $keywords = preg_split('/,(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))/', $line,-1,PREG_SPLIT_DELIM_CAPTURE);

            foreach ($keywords as $col) {
                    $html .= "<td>".trim($col, '"')."</td>\n";
            }
            $html .= "</tr>\n";
    }
    $html .= "</table>\n";
2
ответ дан 6 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: