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

问题描述 投票:-6回答:2

这个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。

问题解决了

php html html-table ascii-art
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>';
    }
}

?>

1
投票

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

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

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

如果你不确定如何将文本拆分成行,你也可以使用像$lines = explode( "\n", $string );这样的东西进行爆炸

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.