我有一个文本文件,其数据如下所示:
#dacdcadcasvsa
#svsdvsd
#
#sfcnakjncfkajnc
I want to keep this line
and this one
如何删除包含#的所有行并回显出看起来不像的行:
I want to keep this line
and this one
我所知道的是我必须得到get_file_contents($ filename)。我必须把它放在一个数组中吗?
任何提示和指导都将不胜感激。
答案 0 :(得分:1)
使用file()
和foreach()
$lines = file("a.txt");
foreach ( $lines as $line ) {
if ( $line[0] != '#' ){
echo $line;
}
}
只需更新文件名称即可。
答案 1 :(得分:0)
在输出之前,您可以用空字符串替换所有注释行。
<div style="white-space: pre-line;">
<?= preg_replace('/^#.*\n/m', '', file_get_contents($filename)) ?>
</div>
答案 2 :(得分:0)
你正在思考正确的思路;虽然您需要的PHP方法(函数)实际上是file_get_contents()
,而不是get_file_contents()
(根据您的问题)。
让我们分解一下:
我们的代码看起来像这样:
<?php
// Get the file contents
$fileContents = file_get_contents('my_file.txt'); // This could be any file extension
// Split the file by new lines
$contentsArr = preg_split('/\r\n|\r|\n/', $fileContents);
// Function for removing items from an array - https://stackoverflow.com/questions/9993168/remove-item-from-array-if-item-value-contains-searched-string-character?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa
function myFilter($string) {
return strpos($string, '?') === false;
}
// Remove comment items from array
$newFileContents = array_filter($fileContents, 'myFilter');
// Concatenate and echo out the result
echo implode(",\n",$newFileContents);
答案 3 :(得分:0)
替代因为我很无聊:
foreach(preg_grep('/^#/', file($filename), PREG_GREP_INVERT) as $line) {
echo $line;
}
^
#
字符