这是我碰巧通过php分析的文件:
#include <stdio.h>
#include <stdlib.h>
#include "subdir/file.h"
#define STRUCT_PTR struct {int i;} *
// This function does nothing useful.
int func(int i, ...) {
return i + i;
}
/*
+ + + + + + Main. + + + + + + + + +
*/
int main(void) {
int i = 1;
char s[10] = "- - - -";
i++;
s[1] = 'b';
i += func(4);
STRUCT_PTR t = malloc(sizeof(*t));
if (!t) {
return EXIT_FAILURE;
}
t->i = 1 == 2 ? 3 : -5;
return EXIT_SUCCESS;
}
// zZ
在最后一行评论之后,文件结束了。当我用编辑器打开它时,在评论之后没有新的空行。
我将此文件的内容存储到变量中,例如$var = file_get_contents(path-to-file.c)
。
然后我循环通过:
for($i = 0; isset($fileContent[$i]); $i++)
我在评论中计算字符数,包括"//", "/*", "*/"
,我也会计算行尾字符。
预期的结果是89,我仍然只得到88.我很确定这是因为我无法检测到行的结束,当时没有新行。
我测试它像if($fileContent[$i]==PHP_EOL)
,但我也尝试使用\ n,\ r \ n等使用不同的组合。
提前感谢您的帮助!
修改: 更多我的代码
for($i = 0; isset($fileContent[$i]); $i++)
{
// ... some not so important conditions
if($fileContent[$i] == '/' && !$inComment && !$inBComment)
{
if($fileContent[$i+1] == '/')
{
$inComment = true;
$charCount += 2;
$skip = true;
continue;
}
}
if($inComment)
{
if($fileContent[$i] == PHP_EOL)
{
$charCount++;
$inComment = false;
}
else
{
$charCount++;
}
continue;
}
答案 0 :(得分:1)
您不需要循环遍历每行的内容。这个班轮应该为你做。请注意,这仅对一行注释有效。
<?php
//load file into array
$fileContents = file('test.txt');
//init counter
$charCount = 0;
foreach ($fileContents as $fileContent)
{
//+count
$charCount += (strpos(trim($fileContent),'//') === 0 )?strlen($fileContent):0;
}
//print
echo $charCount;
?>