Импорт и отображение данных из исходного файла в таблицы HTML

StackOverflow https://stackoverflow.com/questions/3465143

Вопрос

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

Например, файл ввода / исходного источника имеет эти записи: (они префиксированы числом для представления заголовка в таблице HTML. Таким образом, данные из «1-myServer» - это «Server4.mra.dev.pp1» и должно быть под Например, настольный заголовок «Сервер». Существуют также случаи, где не имеют значения (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 ?? Спасибо!

Это было полезно?

Решение

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

[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>';

Другие советы

что-то вроде этого

$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";
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top