这个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。
解决问题
答案 0 :(得分:1)
您必须逐行解析文本文件并将其拆分为字段。看一下explode
php函数,该函数可以通过将每一行拆分为不同的列来帮助您。它应该看起来像$columns = explode( "|", $line);
运行爆炸后,你会收到一个php数组,你可以使用for
或foreach
循环,然后打印出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>';
}
}
?>