TXT (или csv) в HTML-таблицу

Тема в разделе "PHP", создана пользователем Olimp, 15 дек 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Olimp

    Olimp Постоялец

    Регистр.:
    31 янв 2007
    Сообщения:
    51
    Симпатии:
    10
    Есть текстовый файл:
    Код:
    1; ; ;RUSSIA ;RUS; ; ; ; 60; ;BTRUS2 ;;; 2; ; ;NORWAY ;NOR; ; ; ; 54; ;BTNOR2 ;;; 3; ; ;FRANCE ;FRA; ; ; ; 48; ;BTFRA2 ;;; 
    и так далее, все в одну строку

    Нужно средствами php на основе этих данных создать таблицу в html типа:
    1 RUSSIA 60
    2 NORWAY 54
    3 FRANCE 48

    Решение 1 при помощи fgetcsv()

    Нашел в сети такой примерчик:
    PHP:
    <?php
    $row 
    1;
    $handle fopen("test.txt""r");
    echo 
    "<table border=2 cellspacing=2 cellpadding=2>";

    while ((
    $data fgetcsv($handle1000";")) !== FALSE) {
       
    $num count($data);
       
    $i=1;$s="";
       echo 
    "\n <tr>";
       
    $row++;$cs=0;  $tx="";$l=0;
    for (
    $c=0$c $num$c++) {
    if (
    $data[$c]<>"")    { $cs=0$s=$data[$c];    do {$cs++;    $j=$cs+$c;} while (($data[$j]=="") and ($j<$num));} else continue;
    if (
    $cs==1)  echo "<td> $s ";
      elseif (
    $cs==$num) echo "<th colspan=$cs align=center bgcolor='#ffe0e0'> $s";
      else echo 
    "<td colspan=$cs align=left> $s";
    }
    }
    echo 
    "</table>";
    fclose($handle);
    ?>
    Недостатки:
    1. Строки должны отделятся переносом строки в исходном файле
    2. Необходимо удалить столбец с данными BT???2

    Решение 2 - работа с потоком.
    Сначала выводим:
    HTML:
    
    <table>
    	<tr>
    		<td>
    
    Затем в потоке (файле txt:(
    Код:
    1; ; ;RUSSIA ;RUS; ; ; ; 60; ;BTRUS2 ;;;
    заменяем:
    HTML:
    
    1</td><td>RUSSIA</td><td>60</td></tr><tr><td>
    
    и в конце закрыть </td></tr></table>

    Первый вариант мне кажется более перспективным.
    Может кто-нибудь помочь?
     
  2. a_n_d_y

    a_n_d_y

    Регистр.:
    26 мар 2006
    Сообщения:
    465
    Симпатии:
    61
    preg_match_all , а потом уж делай че хочешь с массивом...
     
  3. zetar

    zetar

    Регистр.:
    18 май 2007
    Сообщения:
    497
    Симпатии:
    348
    как вариант
    PHP:
    $txt file_get_contents("test.txt"); 
    echo 
    "<table>";
    foreach(
    explode(";;;",$txt) as $v){
        if (!empty(
    $v)){
            echo 
    "<tr>";
            
    $line=explode(";",$v);
            
    array_map("trim",$line);
            echo 
    "<td>{$line[0]}</td><td>{$line[3]}</td><td>{$line[8]}</td> \n";
            echo 
    "</tr>";
        }
    }
    echo 
    "</table>";

     
    Olimp нравится это.
  4. -=Xardas=-

    -=Xardas=-

    Регистр.:
    17 сен 2008
    Сообщения:
    250
    Симпатии:
    58
    Поддерживаю a_n_d_y, удобней всего будет сделать через preg_match_all().
     
  5. Olimp

    Olimp Постоялец

    Регистр.:
    31 янв 2007
    Сообщения:
    51
    Симпатии:
    10
    Дело в том, что там не чистый csv :((
    вариант zetar - работает, но немного кривовато (для моих целей).
    zetar, отписал в личку, может захотите доработать..

    Добавлено через 11 минут
    Извиняюсь, набрал и не отправил...

    теперь отправил


    в личке пусто
     
  6. xIcemanx

    xIcemanx Создатель

    Регистр.:
    28 ноя 2008
    Сообщения:
    14
    Симпатии:
    1
    В каком смысле? Выложи кусок файла, может быть смогу чем-то помочь.
    Скрипт-то сам по себе простенький.
     
  7. Olimp

    Olimp Постоялец

    Регистр.:
    31 янв 2007
    Сообщения:
    51
    Симпатии:
    10
  8. zetar

    zetar

    Регистр.:
    18 май 2007
    Сообщения:
    497
    Симпатии:
    348
    я отправил файлы, Olimp получил ??
     
  9. Olimp

    Olimp Постоялец

    Регистр.:
    31 янв 2007
    Сообщения:
    51
    Симпатии:
    10
    Все. Вопрос решился. Тему можно закрывать!
     
Статус темы:
Закрыта.