импорт и отображение данных из исходного файла в таблицы HTML - PullRequest
0 голосов
/ 12 августа 2010

php новичок здесь .. Мне нужны некоторые идеи / примеры помощи PHP о том, как импортировать данные из текстового файла с разделителями и отображать их в HTML-таблицах.Данные должны заполняться и отображаться под соответствующим заголовком.Также есть случаи, когда каждая запись не имеет всех значений и, если данных нет, мы можем оставить это значение пустым (см. Примеры записей).Я бы также создал запись строки таблицы для каждой записи.

Например, входной / исходный файл содержит следующие записи: (они начинаются с префикса числом, представляющим заголовок в таблице html. Итак, данные из "1-MyServer "is" server4.mra.dev.pp1 "и должен находиться, например, под заголовком таблицы" Server ". В некоторых случаях запись не имеет всех значений (1-7) (см. Ниже):

1-MyServer=server4.mra.dev.pp1;2-MyLogdate=Wed Aug 11 2010;3-MyDataset=dbip.pp1;4-MyStartTime=01:00:03;5-MyDuration=00:36:09;6-MySize=41.54 GB;7-MyStatus=Succeeded;
1-MyServer=server9.mra.dev.kul;2-MyLogdate=Wed Aug 11 2010;3-MyDataset=gls202.kul_lvm;5-MyDuration=06:20:33;7-MyStatus=Succeeded;
1-MyServer=server9.mra.dev.kul;2-MyLogdate=Wed Aug 11 2010;3-MyDataset=gls101.aie_lvm;4-MyStartTime=01:00:02;

Вот копия моей html-таблицы, которая мне понадобится и для ее отображения: (Кроме того, мне не нужно было бы заполнять запись для «2-MyLogdate» в заголовке)

<table id="stats">
tr>
  <th>Server</th>
  <th>Set</th>
  <th>Start</th>
  <th>Duration</th>
  <th>Size</th>
  <th>Status</th>
</tr>
<tr>
<td>server4.mel.dev.sp1</td>
<td>dbip.sp1</td>
<td>01:00:03</td>
<td>00:36:09</td>
<td>41.54 GB</td>
<td>Succeeded</td>
</tr>
</table>

Так что мне действительно нужна система для сопоставления их соответствующим образом. Как бы я написал это в php ?? Спасибо!

Ответы [ 2 ]

1 голос
/ 12 августа 2010

Это все о поиске шаблонов в ваших файлах.В вашем примере это довольно просто:

[number]-[column name]=[value];

Основная проблема, которую я вижу, состоит в том, что у вас есть избыточная информация: номер столбца и сами столбцы, которые повторяются для каждой строки.Вы можете разобрать их, хотя.Это зависит от того, что вы ожидаете от своей программы: будет ли порядок столбцов всегда одинаковым?Всегда ли будут одни и те же столбцы?Как вы должны реагировать на неизвестные столбцы?

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

$data = array();

$lines = file("my/log/file.log");
// this will parse every line into an associative array, discarding the header number
foreach ($lines as $line)
{
    // populate $matches with arrays where indices are as follows:
    // 0: the whole string (0-Foo=bar;)
    // 1: the column number (0)
    // 2: the column name (Foo)
    // 3: the value (Bar)
    preg_match_all("/([0-9])-([^=]+)=([^;]+);/", $line, $matches, PREG_SET_ORDER);
    $lineData = array();
    foreach ($matches as $information)
        $lineData[$information[2]] = $information[3];
    $data[] = $lineData;
}

$keys = array_keys($data[0]); // you can also set this yourself
// for instance, $keys = array('MyServer', 'MyDataset'); would only display those two columns
echo '<table><tr>';
foreach ($keys as $column)
    echo '<th>' . $column . '</th>';
echo '</tr>';

foreach ($data as $row)
{
    echo '<tr>';
    foreach ($keys as $column)
        echo '<td>' . (isset($row[$column]) ? $row[$column] : '') . '</td>';
    echo '</tr>';
}
echo '</table>';
0 голосов
/ 12 августа 2010

как то так

$logarr = file("log.txt");
foreach ($logarr as $s) {
  $s = str_replace(";","&",$s);
  $a = array();
  parse_str($s,$a);
  echo "<tr>\n";
  if (isset($a['1-MyServer'])) echo $a['1-MyServer']; else echo "&nbsp;"
  if (isset($a['2-MyLogdate'])) echo $a['2-MyLogdate']; else echo "&nbsp;"
  // and so on
  echo "</tr>\n";
}
...