【问题标题】:How do I convert highly formatted textual table data into HTML? [closed]如何将高度格式化的文本表格数据转换为 HTML? [关闭]
【发布时间】:2013-01-14 14:41:09
【问题描述】:

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

问题解决

【问题讨论】:

  • 你已经尝试过什么?你有一些代码吗?
  • 哇,真的吗?使用标准的(阅读:真实的)序列化格式,如 JSON、XML、CSV、YAML 等,您不会感到困扰吗?
  • @MattBall 会更好:P ahahaha 但是客户需要这个
  • 我们随时为您提供帮助。不为你做你的工作,也不教你编程的基础知识。
  • 是时候寻找更好的客户了。

标签: php html html-table ascii-art


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

  • 嗯,这将是一个好主意......谢谢你的提示
  • 使用 file('filename.txt) 结果将是每行的一个数组...
【解决方案2】:

这样的事情应该可以工作。示例是一个名为 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 将文件读入数组,然后将其解析为 &lt;table&gt;

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

?>

【讨论】:

  • 与 cvs 我知道更简单,但不是我需要的
  • 那么,您发布的 ASCII-art 表结构实际上就是您必须使用的,@user1494162?
  • 很遗憾,是的...这是客户要求的,所以是的...
  • @user1494162:好的,我修改了我的代码示例,以逐字解析您的问题中的数据。应该工作。
  • @jakeGould 我用另一种方式解决了谢谢你的帮助
猜你喜欢
  • 1970-01-01
  • 2012-09-05
  • 2012-05-09
  • 1970-01-01
  • 2019-05-08
  • 1970-01-01
  • 2011-10-17
  • 1970-01-01
  • 2010-10-13
相关资源
最近更新 更多