Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
3 / 3 / 4
Регистрация: 29.03.2013
Сообщений: 42
1

Получить и упорядочить данные из текстового файла

27.02.2015, 01:59. Просмотров 986. Ответов 3
Метки нет (Все метки)

Здравствуйте!
Имеется текстовый файл следующего содержания:
// id|value1|value2|value3
Кликните здесь для просмотра всего текста

#TEXT1
101|EEE|RRR|6549
100|QQQ|WWW|150
102|TTT|YYY|0
...
#TEXT2
100|QQQ|WWW|678
101|EEE|RRR|613
102|TTT|YYY|132
...
#TEXT3
100|QQQ|WWW|4448
102|TTT|YYY|1322
101|EEE|RRR|500
...


Задача состоит в том, чтобы получить эти данные и вывести следующим образом:
id - value1 - value2 - value3 (данные после TEXT1) - value3 (данные после TEXT2) - value3 (данные после TEXT3) - ...

Попытки:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
   $resource = fopen("http://some.ru/some.txt", "r");
 
   echo "<table border='1'>";
       while (!feof($resource)) {
           $resrow = fgets($resource);
 
           if (strpos($resource, "#") !== false) { // если есть #
               $curtext = $resrow;
           } else {
               list($id, $val1, $val2, $val3) = explode("|", $resrow);
               $curval = array($id =>array('val1' => $val1, 'val2' => $val2, 'val3' => array($curtext => $val3)));
               echo "<tr><td>".$id."</td><td>".$curval[$id]['val1']."</td><td>".$curval[$id]['val2']."</td><td>".$curval[$id]['val3'][$curtext]."</td></tr>";
           }
       } // while
   echo "</table>";
   fclose($resource);
?>
Как результат получаем следующую табличку: (собственно то же самое отображение что и в файле, только в виде таблички)
Кликните здесь для просмотра всего текста
+-----+----+-----+-------+
| 101 | EEE | RRR | 6549 |
+-----+----+-----+-------+
| 100 | QQQ | WWW | 150 |
+-----+----+-----+-------+
| 102 | TTT | YYY | 0 |
+-----+----+-----+-------+
| ... | ... | ... | ... |
+-----+----+-----+-------+
| 100 | QQQ | WWW | 678 |
+-----+----+-----+-------+
|101 | EEE | RRR | 613 |
+-----+----+-----+-------+
| 102 | TTT | YYY | 132 |
+-----+----+-----+-------+
| ... | ... | ... | ... |
+-----+----+-----+-------+
| 100 | QQQ | WWW | 4448 |
+-----+----+-----+-------+
| 102 | TTT | YYY | 1322 |
+-----+----+-----+-------+
| 101 | EEE | RRR | 500 |
+-----+----+-----+-------+


Дальше столбняк. Не могу придумать решение. Нужно превратить предыдущую таблицу в что-то типа этого (т.е. сгруппировать все value3 для одинаковых id):
Кликните здесь для просмотра всего текста

+-----+----+-----+-------+-----+-----+
| 101 | EEE | RRR | 6549 | 613 | 500 |
+-----+----+-----+-------+-----+-----+
| 100 | QQQ | WWW | 150 | 678 | 4448 |
+-----+----+-----+-------+-----+-----+
| 102 | TTT | YYY | 0 | 132 | 1322 |
+-----+----+-----+-------+-----+-----+
| ... | ... | ... | ... |
+-----+----+-----+-------+-----+-----+
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.02.2015, 01:59
Ответы с готовыми решениями:

Выбрать и упорядочить данные из текстового файла
В языке С не сильна, и программа вызвала некое недоумение) Есть тестовый файл со следующими...

Упорядочить лексикографические строки текстового файла
Здравствуйте. помогите пожалуйста решить.28 числа экзамен.из 25 задач не могу решить только эти. я...

Описать структуру с полями, считать данные из текстового файла, вывести данные, подсчитать количество
Доброе утро. С C# я знаком весьма посредственно, однако появилась необходимость выполнить на нем...

Получить и упорядочить данные
Здравствуйте. Имеется следующий код: $data =...

3
3226 / 2773 / 1394
Регистрация: 15.01.2014
Сообщений: 6,084
27.02.2015, 03:44 2
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
$arr = file('http://some.ru/some.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$group = [];
$i = 0;
foreach($arr as $line){
    if(strpos($line, "#") !== false) continue;
    $tmp = explode('|', $line);
    $id = array_shift($tmp);
    $group[$id] = (array)$group[$id] + array_flip($tmp);
}
?>
<table border="1">
<?php
foreach($group as $key => $line){
  $vals = array_keys($line);
  ?>
  <tr>
    <td><?=$key;?></td>
    <?php
    foreach($vals as $val){
      ?>
      <td><?=$val;?></td>
      <?php
    }
      ?>
  <tr>
  <?php
}
?>
</table>
1
3 / 3 / 4
Регистрация: 29.03.2013
Сообщений: 42
27.02.2015, 10:45  [ТС] 3
Lazy_Den, спасибо, то что нужно, но не могу понять почему некоторые значения теряются. иногда 0 не выводит.
и еще если есть например:
Кликните здесь для просмотра всего текста
#TEXT1
101|EEE|RRR|6549
100|QQQ|WWW|150
102|TTT|YYY|0
#TEXT2
100|QQQ|WWW|678
102|TTT|YYY|132
#TEXT3
100|QQQ|WWW|4448
102|TTT|YYY|1322
101|EEE|RRR|500

то вывод пропускает значение value3 из #TEXT2 (нужно чтобы при отсутствии строки с таким id в value3 писало 0)
Кликните здесь для просмотра всего текста
+-----+----+-----+-------+-----+-----+
| 101 | EEE | RRR | 6549 | 0 | 500 |
+-----+----+-----+-------+-----+-----+
| 100 | QQQ | WWW | 150 | 678 | 4448 |
+-----+----+-----+-------+-----+-----+
| 102 | TTT | YYY | 0 | 132 | 1322 |
+-----+----+-----+-------+-----+-----+
0
Миниатюры
Получить и упорядочить данные из текстового файла  
3226 / 2773 / 1394
Регистрация: 15.01.2014
Сообщений: 6,084
28.02.2015, 03:55 4
Лучший ответ Сообщение было отмечено bpetruk007 как решение

Решение

bpetruk007, думаю, что можно и упростить, но сегодня на это сил уже нету, поэтому решение "в лоб":

PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<?php
$arr = file('http://some.ru/some.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$group = [];
$ids = [];
$v3arr = [];
$i = 0;
foreach($arr as $k => $line){
    if(strpos($line, "#") !== false)    {
        $i++;
        continue;
    }
    $tmp = explode('|', $line);
    $id = array_shift($tmp);
    $v3arr[$i][$id] = array_pop($tmp);
    $group[$id] = array_flip($tmp);
}
$group = array_map('array_flip', $group);
foreach($group as $id => $data){
    foreach($v3arr as $v3){
        array_push( $group[$id], (isset($v3[$id]) ? $v3[$id] : 0) );
    }
}
?>
<table border="1">
<?php
foreach($group as $key => $vals){
  ?>
  <tr>
    <td><?=$key;?></td>
    <?php
    foreach($vals as $val){
      ?>
      <td><?=$val;?></td>
      <?php
    }
      ?>
  <tr>
  <?php
}
?>
</table>
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2015, 03:55

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Считать данные из текстового файла
Всё не так просто. Дан текстовый файл, в нём строка типа lo8vd76gjo6asd, нужно считать ТОЛЬКО...

Спарсить данные из текстового файла
Здравствуйте! Есть файл с таким текстом. Нужно получить в итоге.

Вывести данные текстового файла
Вывести данные текстового файла на экран (по строкам с интервалом 5 секунд между строками)

Данные в переменную из текстового файла
Нужно получить в переменную данные следующего вида (они должны быть записаны в текстовом файле): ...

Отобрать данные из текстового файла
Здравствуйте! Есть задача, решение которой я хочу написать на С, но данные к условию (для удобства)...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.