-6

这个 ASCII-art 表实际上是我需要解析的:

\---------\-------------\-------------\
| 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 行。

问题解决了

4

2 回答 2

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

?>
于 2013-01-30T17:25:44.800 回答
1

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

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

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

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

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

就是这样,你应该在这里拥有所有的构建块,是时候自己把它们拼凑起来了:)

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

于 2013-01-30T17:16:26.303 回答