计算数据库字段上的代码行

时间:2011-12-13 22:17:50

标签: php mysql

使用PHP和MySQL。我需要做一些类似Github在显示源代码时所做的事情,

122 lines (98 sloc) 4.003 kb

我需要从MySQL数据库结果中获取Lines Of CodeSource Lines Of Code的总数。

源代码将在wordpress表中作为元字段,我知道如何使用文件完成此操作,但不知道如何使用数据库结果。然后,我还需要计算此字段上使用的磁盘空间,以显示4.003 kb

之类的内容

如果你知道怎么做,我将不胜感激

更新

这个非常丑陋的代码是我到目前为止找到的唯一解决方案,如果您搜索SO或Google,所有结果都显示如何计算FILE上的代码行数,我的问题非常不同,我不是在提取文件,我有一个来自$ variable数据库中的MySQL数据库的结果

下面这段代码执行3件事中的一件,它总是(LOC)的总行数,所以我只需要得到(SLOC)和(使用的磁盘空间)但是我对更好的计算方法非常开放变量的LOC。

// Get LOC
$a = $code_source; // Variable holding our code
$result = count_chars($a, 0);
for ($i=0; $i < count($result); $i++) {
    if ($result[$i] != 0) {
        if (chr($i) == "\n") // line feed
           $n = $result[$i];
        if (chr($i) == "\r") // carriage return
            $r = $result[$i];
    }
}
if ($n > $r) $l = $n + 1;
if ($r >= $n) $l = $r + 1;
if (!isset($l) ) $l = "2";

echo "Line Of Code = " . $l;

空间

//Get Disk Space Used
if (function_exists('mb_strlen')) {
    $size = mb_strlen($code_source, '8bit');
} else {
    $size = strlen($code_source);
}
if($size >= 1024)
    $size = round($size / 1024, 2).' KB';
else
    $size = $size.' bytes';
echo 'size of file' . ': ' . $size;

第二次更新

好的,这是我现在的最终结果,我省略了@refp(LOC)代码,因为我无法让它工作因为某些原因,我确实使用了他的SLOC代码并将所有内容放入一个可用的类中。请免费填写

class SourceCodeHelper{

    // Count total number of Lines (LOC)
    public function countLOC($string){
        $result = count_chars($string, 0);
        for ($i=0; $i < count($result); $i++) {
            if ($result[$i] != 0) {
                if (chr($i) == "\n\n") // line feed
                   $n = $result[$i];
                if (chr($i) == "\r") // carriage return
                    $r = $result[$i];
            }
        }
        if ($n > $r) $l = $n + 1;
        if ($r >= $n) $l = $r + 1;
        if (!isset($l) ) $l = "2";
        //substr_count ($data, "\n") + 1;
        return  $l;
    }

    // Count total Source code lines of Code (SLOC)
    public function countSLOC($string){
        return count(preg_split("/\n\s*/", $string));
    }

    // Calculate disk space usage of string
    public function stringDiskSpace($string){
        if (function_exists('mb_strlen')) {
            $size = mb_strlen($string, '8bit');
        } else {
            $size = strlen($string);
        }
        return diskSpacePretty($size);
    }

    // Format a disk space usage into human readable format
    public function diskSpacePretty($size){
        if($size >= 1024)
            $size = round($size / 1024, 2).' KB';
        else
            $size = $size.' bytes';
        return $size;
    }

}

2 个答案:

答案 0 :(得分:6)

没有直接的方法来计算mysql内部字段中的行数。

相反,我建议您在表格中添加一个新列,用于存储行数。使用PHP(或任何负责插入数据的后端语言)计算LOC / SLOC,并在必要时更新它。


要计算字符串中的行数(LOC),可以使用substr_count来计算第一个参数字符串中第二个参数字符串的出现次数。

在下面的示例中,我们将计算\n$data的出现次数。

substr_count ($data, "\n") + 1; // since one \n creates two lines

要计算SLOC的数量,您可以使用preg_split过滤掉所有空行(长度为0或仅包含空格的行)

count (preg_split ("/\n\s*/", $data)) 

答案 1 :(得分:1)

要回答您的问题,以下查询应该能够计算字段中的行数。然而它有点hacky,我怀疑它会很好地扩展!一切都取决于我的用例。

SELECT 
  SUM( LENGTH(fieldname) - LENGTH(REPLACE(fieldname, '\n', ''))+1) 
FROM tablename

希望有所帮助。