0

我需要一个脚本来计算文本文件中所有在一行上的管道分隔条目的数量。我找到了一个计算行数的脚本并对其进行了修改,以为我可以让它工作,但遗憾的是它仍然计算行数,所以目前将值设为 1。请你看看并帮助我解决问题吗?文本文件如下所示:

Fred|Keith|Steve|James

我正在尝试的脚本是这样的:

$file1 = "names.txt";
$line = file($file1); 
$count = count(explode("|", $line));
echo "$file1 contains $count words";

非常感谢任何帮助。非常感谢。

4

4 回答 4

1

有多种方法可以解决此类问题,打开文件的不同方式以及解释数据的不同方式。

但是,您将要寻找与此类似的东西:

<?php
    $data = file_get_contents("names.txt");
    $count = count(preg_split("/|/", $data));
    echo "The file contains $count words.";
?>
于 2012-12-04T23:53:22.590 回答
1

最快的方法就是数一数管道并添加一个。修剪字符串以确保开头和结尾的管道不计为一个项目。

<?php
   $contents = file_get_contents('names.txt');
   $count = substr_count(trim($contents, "|\n "), '|') + 1;
   echo "$file1 contains $count words";
于 2012-12-05T00:04:07.663 回答
1

有很多方法可以做到这一点,这是我的看法...

// get lines as array from file
$lines = file('names.txt');

// get a count for the number of words on each line (PHP > 5.3) 
$counts = array_map(function($line) { return count(explode('|', $line)); }, $lines);
// OR (PHP < 5.3) get a count for the number of words on each line (PHP < 5.3) 
//$counts = array_map(create_function('$line', 'return count(explode("|", $line));'), $lines);

// get the sum of all counts
$count = array_sum($counts);

// putting it all together as a one liner (PHP > 5.3)...
$count = array_sum(array_map(function($line) { return count(explode('|', $line)); }, file('names.txt')));
// or (PHP < 5.3)...
// $count = array_sum(array_map(create_function('$line', 'return count(explode("|", $line));'), file('names.txt')));
于 2012-12-05T00:10:27.907 回答
0

您几乎做到了,对工作原理只有一个小误解file

您的行变量中没有单行而是所有行,您可以访问数字索引从 0 开始的单行

$nunWords = count( explode ('|', $line[0] ) );

因此,要计算单词,假设第 10 行,您只需将索引更改为 9 (因为我们从 0 开始)

另一个例子

$lines = file ('yourfile');
foreach ( $lines as $curLine => $line )
{
      echo  "On line " . $curLine+1 . " we got " . count( explode ('|', $line ) ) . " words<br/>\n";
}
于 2012-12-05T00:14:34.683 回答