使用PHP和MySQL。我需要做一些类似Github在显示源代码时所做的事情,
122 lines (98 sloc) 4.003 kb
我需要从MySQL数据库结果中获取Lines Of Code
和Source 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;
}
}
答案 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
希望有所帮助。