Frage

php Neuling here..I müssen einige PHP Hilfe Ideen / Beispiele dafür, wie Daten aus einer Textdatei importieren und sie in HTML-Tabellen abzubilden. Die Daten sollten bevölkern und unter seinem richtigen Header zugeordnet werden. Es gibt Fälle, wo auch jeder Datensatz nicht alle Werte hat und keine Daten, wenn, dann können wir es verlassen null (Beispieldatensätze sehen). Ich würde auch eine Tabellenzeile Eintrag für jeden Datensatz erstellen.

Zum Beispiel kann die Eingabe / Quelldatei hat diese Einträge: (sie durch eine Reihe Präfix der Header in der HTML-Tabelle darzustellen So Daten von „1-MyServer“ sind „server4.mra.dev.pp1“ und. . unter Tabellenkopf „Server“ zum Beispiel sein sollte Es gibt Fälle, auch dann, wenn der Datensatz nicht alle Werte hat (1-7) (siehe unten):

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;

Hier ist eine Kopie meiner HTML-Tabelle, dass ich es brauchen würde, es auch zur Karte: (Auch würde ich nicht zu bevölkern Rekord habe für „2-MyLogdate“ in einen Header)

<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>

Also, was ich wirklich brauchen, ist ein System, diese in geeigneter Weise abzubilden. Wie würde ich dies in PHP schreiben ?? Dank!

War es hilfreich?

Lösung

Es geht um die Muster in Ihren Dateien zu finden. In Ihrem Beispiel ist es ziemlich einfach:

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

Das Hauptproblem sehe ich darin, dass Sie redundante Informationen haben: die Nummer der Spalte, und die Spalten selbst, die für jede Zeile wiederholt werden. obwohl Sie können sie weg, analysieren. Es hängt davon ab, was Sie von Ihrem Programm erwarten: werden die Spalten bestellen immer gleich sein? Wird es immer die gleichen Spalten sein? Wie sollten Sie reagieren auf unbekannte Spalten?

Hier ist ein kleines Beispiel von dem, was man tun könnte, reguläre Ausdrücke verwenden. Dieses Beispiel geht davon aus, dass Spaltennamen alle gleich sind, und dass Sie sie alle angezeigt werden und dass sie dann immer in der gleichen Reihenfolge. Mit anderen Worten, ich mache es den einfachen Weg.

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

Andere Tipps

so etwas wie diese

$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";
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top