检测存储在字符串变量中的文件行的结尾

时间:2015-02-28 16:14:53

标签: php parsing

这是我碰巧通过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; 

                    }

1 个答案:

答案 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;

?>