我需要在网页中显示一个纯文本文件,其中包含两个空格制表符的数据列。
我所做的是使用 PHP 读取文本文件并将其打印出来<pre>
标签使用等宽字体,如下所示:
<pre>
<?php
$fn="data.txt";
$fi=fopen($fn, "r");
$fc=fread($fi, filesize($fn)); //open and read text file
fclose($fi);
$fc=str_replace("\t", " ", $fc); //replace tabs with two spaces
print($fc); //print data between PRE tags
?>
</pre>
它几乎可以工作,但选项卡很麻烦。用两个空格替换制表符很简单,但随后非空白字符会被推入而不是吸收到制表符中。真正的标签吸收n-1
非空白字符(其中n
是每个制表符的空格数)。
例如,下表应显示如下:
| | 43| 43| 7| | |
| 12|128|128|128| | 53|
| 3| 3| 3| 3| | |
| | | 21| 21| 39| |
然而盲目更换all带有两个空格的制表符,我们得到:
| | 43| 43| 7| | |
| 12|128|128|128| | 53|
| 3| 3| 3| 3| | |
| | | 21| 21| 39| |
我正在尝试找出一种(相当简单的)方法将制表符转换为空格,同时考虑到不占用完整空间的制表符n
spaces.
我前段时间写过这个函数,可能会有所帮助:
function tab2space($line, $tab = 4, $nbsp = FALSE) {
while (($t = mb_strpos($line,"\t")) !== FALSE) {
$preTab = $t?mb_substr($line, 0, $t):'';
$line = $preTab . str_repeat($nbsp?chr(7):' ', $tab-(mb_strlen($preTab)%$tab)) . mb_substr($line, $t+1);
}
return $nbsp?str_replace($nbsp?chr(7):' ', ' ', $line):$line;
}
它的目的是处理多字节字符串,如果你只有数字,你可以摆脱mb_
,它将加速此功能。
[+] 请注意,这适用于一行,因此您需要使用以下命令逐行处理fgets
而不是一次整个文件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)