Domanda

php newbie here..I bisogno di alcuni PHP aiuto idee / esempi su come importare dati da un file di testo delimitato e mapparli in tabelle HTML. I dati devono compilare ed essere mappati sotto il suo colpo di testa propria. Ci sono casi anche il luogo dove ogni record non ha tutti i valori e se non ci sono dati, allora si può lasciare NULL (vedere record di esempio). Vorrei anche creare una voce di riga della tabella per ogni record.

Ad esempio, il file di input / source ha queste voci: (sono preceduti da un numero per rappresentare l'intestazione nella tabella html Quindi i dati di "1-MyServer" è "server4.mra.dev.pp1" e. . dovrebbe essere sotto intestazione di tabella "Server", per esempio ci sono casi in cui anche il record non ha tutti i valori (1-7) (vedi sotto):

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;

Ecco una copia della mia tabella HTML che avrei bisogno di mappare troppo: (Inoltre, non avrei per registrare popolano per "2-MyLogdate" in un colpo di testa)

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

Quindi quello che ha realmente bisogno è un sistema per mappare questi in modo appropriato. Come faccio a scrivere questo in php ?? Grazie!

È stato utile?

Soluzione

E 'tutto di trovare i modelli nei file. Nel tuo esempio, è piuttosto semplice:

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

Il problema principale che vedo è che si dispone di informazioni ridondanti: il numero della colonna, e le colonne stesse, che si ripetono per ogni riga. Si possono analizzare via, però. Dipende da quello che vi aspettate dal vostro programma: saranno le colonne ordinare sempre lo stesso? Ci saranno sempre le stesse colonne? Come si deve reagire a colonne sconosciuti?

Ecco un rapido esempio di quello che si potrebbe fare, utilizzando le espressioni regolari. Questo esempio presuppone che i nomi di colonna sono tutti uguali, e che si desidera visualizzare tutti, e che faranno sempre nello stesso ordine. In altri termini, lo sto facendo nel modo più semplice.

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

Altri suggerimenti

qualcosa di simile

$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";
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top