ソースファイルからHTMLテーブルへのデータのインポートとマッピング
-
27-09-2019 - |
質問
PHP初心者はこちら..いくつかの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テーブルのコピーです。それをマッピングするために必要なのは次のとおりです。
<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 " "
if (isset($a['2-MyLogdate'])) echo $a['2-MyLogdate']; else echo " "
// and so on
echo "</tr>\n";
}