如何将高度格式化的文本表数据转换为HTML?

时间:2013-01-30 17:14:43

标签: php html html-table ascii-art

这个ASCII艺术表实际上是我需要解析的内容:

\---------\-------------\-------------\
| Username| IP          | Connected   |
\---------\-------------\-------------\
| test    | 127.0.0.1   | Yes         |
| atest   | 192.168.2.1 | No          |
| aaa     | 1.2.3.4     | Yes         |
\---------\-------------\-------------\

我必须将其转换为HTML

    <thead>
        <tr>
            <td>Username</td>
            <td>IP</td>
            <td>Connected</td>
        </tr>
    </thead>
    <tr>
        <td>Test</td>
        <td>127.0.0.1</td>
        <td>Yes</td>
    </tr>
    <tr>
        <td>Atest</td>
        <td>192.168.2.1</td>
        <td>No</td>
    </tr>
    <tr>
        <td>aaa</td>
        <td>1.2.3.4</td>
        <td>Yes</td>
    </tr>
</table>

当然,内容只是一个例子。行可以是40,只有3。

解决问题

2 个答案:

答案 0 :(得分:1)

您必须逐行解析文本文件并将其拆分为字段。看一下explode php函数,该函数可以通过将每一行拆分为不同的列来帮助您。它应该看起来像$columns = explode( "|", $line);

运行爆炸后,你会收到一个php数组,你可以使用forforeach循环,然后打印出html。

您可能希望在爆炸返回的每个部分上运行trim,以便删除所有空格,并仅保留有趣的文本。

如果您不确定如何将文本拆分为行,您也可以使用类似$lines = explode( "\n", $string );

之类的内容进行爆炸

如果您不确定如何阅读文本文件,请查看php函数file_get_contents

就是这样,你应该在这里拥有所有的构建块,现在是时候将它们拼凑在一起了:)

还有一个提示,如果您担心水平分隔线,可以通过比较每一行的第一个字符来跳过它们,并跳过那些以\开头的字符。像$line[0] == '\'这样的东西应该可以解决问题。

答案 1 :(得分:1)

这样的事情应该有效。示例是一个名为my_data.txt的文本文件,其中包含以下内容,它基于您的示例:

\---------\-------------\-------------\
| Username| IP          | Connected   |
\---------\-------------\-------------\
| test    | 127.0.0.1   | Yes         |
| atest   | 192.168.2.1 | No          |
| aaa     | 1.2.3.4     | Yes         |
\---------\-------------\-------------\

这是PHP脚本,使用file将文件读入数组,然后将其解析为<table>

<?php

$data = file('my_data.txt');

if (!empty($data)) {
    $value_array = array();
    // Strip out lines like this `\---------\-------------\-------------\`
    $data = preg_replace("/\\|-/", "", $data);
    $data = trim($data);
    if(!empty($data)) {
        echo '<table border="1">';
        foreach ($data as $key => $value) {
            if (!empty($value)) {
                echo '<tr>';
                $value_array = preg_split("/|/", $value);
                foreach ($value_array as $table_cell_value) {
                    echo '<td>' . $table_cell_value . '</td>';
                }
                echo '</tr>';
            }
        }
        echo '</table>';
    }
}

?>