Pregunta

php novato here..I necesita algunas ideas PHP ayuda / ejemplos sobre cómo importar datos desde un archivo de texto delimitado y asignarlos a las tablas HTML. Los datos deben ser asignada poblar y bajo su cabecera adecuada. También hay casos en donde cada registro no tiene todos los valores y si no hay datos, entonces lo podemos dejar nula (Ver registros de ejemplo). También me gustaría crear una entrada de fila de la tabla para cada registro.

Por ejemplo, el archivo de entrada / fuente tiene estas entradas: (que tienen como prefijo un número para representar el encabezado de la tabla HTML para que los datos de "1-MiServidor" es "server4.mra.dev.pp1" y. . debe estar bajo encabezado de la tabla "servidor", por ejemplo Hay casos también en que el registro no tiene todos los valores (1-7) (ver más abajo):

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;

Esta es una copia de mi tabla HTML que se necesitaría para mapear también: (Además, no tendría que pueblan registro de "2-MyLogdate" en un encabezado)

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

Así que lo que realmente necesita es un sistema para asignar estos apropiada. ¿Cómo voy a escribir esto en php ?? Gracias!

¿Fue útil?

Solución

Se trata de encontrar los patrones en sus archivos. En su ejemplo, es bastante fácil:

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

El principal problema que veo es que usted tiene información redundante: el número de la columna, y las mismas columnas, que se repiten para cada fila. Se puede analizar a la basura, sin embargo. Depende de lo que espera de su programa: serán las columnas pedido debe ser el mismo? ¿Habrá siempre las mismas columnas? ¿Cómo debe reaccionar a las columnas desconocidos?

Aquí está un ejemplo rápido de lo que podría hacer, utilizando las expresiones regulares. En este ejemplo se asume que los nombres de columna son todos iguales, y que desea mostrar a todos ellos, y que siempre va a estar en el mismo orden. En otras palabras, lo estoy haciendo el camino más fácil.

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

Otros consejos

algo como esto

$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";
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top