За последние 24 часа нас посетили 18725 программистов и 1603 робота. Сейчас ищут 882 программиста ...

Определить ";" в csv

Тема в разделе "PHP для новичков", создана пользователем joost, 23 май 2008.

  1. joost

    joost Guest

    Как определить ";" в данных csv файла, где разделитель тоже ";"?
    Подкинте идею. Как узнать что ";" не разделитель, а часть данных?
     
  2. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
  3. joost

    joost Guest

    им и пользуюсь, но все ";" он видит как разделитель, а есть данные где есть ";". Мне надо как-то определить, где ";" как разделитель, а где как часть данных.
     
  4. joost

    joost Guest

    Вот нашел в нете.
    Но не могу понять "идею" определения ";"
    PHP:
    1.  
    2. <?php
    3.   $file = $_POST['file'];
    4.   $csv_lines  = file("book1.csv");
    5.   if(is_array($csv_lines))
    6.   {
    7.     //разбор csv
    8.     $cnt = count($csv_lines);
    9.     for($i = 0; $i < $cnt; $i++)
    10.     {
    11.       $line = $csv_lines[$i];
    12.       $line = trim($line);
    13.       //указатель на то, что через цикл проходит первый символ столбца
    14.       $first_char = true;
    15.       //номер столбца
    16.       $col_num = 0;
    17.       $length = strlen($line);
    18.       for($b = 0; $b < $length; $b++)
    19.       {
    20.         //переменная $skip_char определяет обрабатывать ли данный символ
    21.         if($skip_char != true)
    22.         {
    23.           //определяет обрабатывать/не обрабатывать строку
    24.           ///print $line[$b];
    25.           $process = true;
    26.           //определяем маркер окончания столбца по первому символу
    27.           if($first_char == true)
    28.           {
    29.             if($line[$b] == '"')
    30.             {
    31.               $terminator = '";';
    32.               $process = false;
    33.             }
    34.             else
    35.               $terminator = ';';
    36.             $first_char = false;
    37.           }
    38.  
    39.           //просматриваем парные кавычки, опредляем их природу
    40.           if($line[$b] == '"')
    41.           {
    42.             $next_char = $line[$b + 1];
    43.             //удвоенные кавычки
    44.             if($next_char == '"')
    45.               $skip_char = true;
    46.             //маркер конца столбца
    47.             elseif($next_char == ';')
    48.             {
    49.               if($terminator == '";')
    50.               {
    51.                 $first_char = true;
    52.                 $process = false;
    53.                 $skip_char = true;
    54.               }
    55.             }
    56.           }
    57.  
    58.           //определяем природу точки с запятой
    59.           if($process == true)
    60.           {
    61.             if($line[$b] == ';')
    62.             {
    63.                if($terminator == ';')
    64.                {
    65.  
    66.                   $first_char = true;
    67.                   $process = false;
    68.                }
    69.             }
    70.           }
    71.  
    72.           if($process == true)
    73.             $column .= $line[$b];
    74.  
    75.           if($b == ($length - 1))
    76.           {
    77.             $first_char = true;
    78.           }
    79.  
    80.           if($first_char == true)
    81.           {
    82.  
    83.             $values[$i][$col_num] = $column;
    84.             $column = '';
    85.             $col_num++;
    86.           }
    87.         }
    88.         else
    89.           $skip_char = false;
    90.       }
    91.     }
    92.   }
    93.    var_dump($values);
    94.  
    95. ?>
    96.  
     
  5. Anonymous

    Anonymous Guest

    данные в кавычки брать не пробовал?
     
  6. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Данные в CSV должны быть в " ", следовательно тогда всякие спец символы всегда будут в данных игнорироватся, главное не забывать " бекслешить
     
  7. joost

    joost Guest

    Excel разве когда сохраняет в csv берет в кавычки?
    Прислали csv, а в нем даные не в кавычках
     
  8. joost

    joost Guest

    данные в book1.csv
    который парсит скрипт приведеный више данные тоже не в кавычках.


    но скрипт работает коректно.
    обясните на основе чего в скрипте определяются ";", которые являются частью данных, а не разделителем?
     
  9. joost

    joost Guest

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

    Anonymous Guest

    Приведи одну строчку?
     
  11. joost

    joost Guest

    чего? файла csv?
    например
     
  12. Anonymous

    Anonymous Guest

    не например, а приведи.
     
  13. joost

    joost Guest

    извени, но не понимаю, что надо сделать. обясни, плиз!
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    если можешь менять csv замени все "ненужные" ; так
    PHP:
    1. $text=str_replace(";","&#".ord(';').";",$text);
    если не можешь то может быть:
    PHP:
    1. $str = "12345;te;xt;more_text;12214";
    2. preg_match("#(\d+);(.+?);([^;]+);(\d+)#",$str,$arr);
    3. print_r($arr);
     
  15. joost

    joost Guest

    Вопрос на засыпку.
    У кого Excel сохраняет csv и берет данные в кавычки?
     
  16. Вльдемар

    Вльдемар Активный пользователь

    С нами с:
    20 май 2006
    Сообщения:
    635
    Симпатии:
    0
    Адрес:
    Белхород
    У меня
     
  17. Johnatan

    Johnatan Активный пользователь

    С нами с:
    6 мар 2008
    Сообщения:
    508
    Симпатии:
    0
    Адрес:
    Испания
    joost
    Ты привёл САМ пример, где данные взяты в кавычки? Что ты ещё хочешь?
     
  18. joost

    joost Guest

    смотри внимательно. в моем примере кавычки часть данных
     
  19. joost

    joost Guest

    не туда написал
     
  20. joost

    joost Guest

    по скрипту приведеном мной в 4 посте никто ничего не скажет?