本帖最后由 福仔 于 2022-3-30 14:26 编辑
测试 () 返回 (0 ) 变量名 | 类 型 | 静态 | 数组 | 备 注 | 文件路径 | 文本型 | | | 文件号 | 整数型 | | | 行数 | 整数型 | | | 空行数 | 整数型 | | | i | 整数型 | | | 文本 | 字节集 | | | 文本长度 | 整数型 | | | 文本指针 | 整数型 | | | 计时 | 整数型 | | | 获取到的行数_去除空行 | 整数型 | | | 获取到的行数_保留空行 | 整数型 | | | 输出文本 | 文本型 | | |
文件路径 = 取运行目录 () + “\测试文本.txt” 如果真 (真)  文件号 = 打开文件 (文件路径, #重写, #无限制 ) 置随机数种子 () 行数 = 1000000  行数 = 取随机数 (行数, 行数 + 32767 ) 计次循环首 (行数, i )  如果真 (取随机数 (1, 100 ) = 1 )    空行数 = 空行数 + 1   写出文本 (文件号, #换行符 )     判断 (行数 = i )  写出文本 (文件号, 到文本 (i ) + “-” + 取随机字母 (取随机数 (100, 300 )) )   写文本行 (文件号, 到文本 (i ) + “-” + 取随机字母 (取随机数 (100, 300 )) )     计次循环尾 () 关闭文件 (文件号 ) 文本 = 读入文件 (文件路径 )文本长度 = 取字节集长度 (文本 )计时 = 取启动时间 ()文本指针 = 取指针_字节集型 (文本 )获取到的行数_去除空行 = 取文本行数 (文本指针, 真)获取到的行数_保留空行 = 取文本行数 (文本指针, 假)计时 = 取启动时间 () - 计时 输出文本 = “生成的行数 = ” + 到文本 (行数 ) + “, 空行数 = ” + 到文本 (空行数 ) + “, 总行数 = ” + 到文本 (行数 + 空行数 ) + #换行符 输出文本 = 输出文本 + “生成的文本一共 ” + 到文本 (文本长度 ) + “ 个字节, ” + 到文本 (四舍五入 (文本长度 ÷ 1024, 2 )) + “KB, ”输出文本 = 输出文本 + 到文本 (四舍五入 (文本长度 ÷ 1024 ÷ 1024, )) + “MB” + #换行符 + #换行符 输出文本 = 输出文本 + “获取到的行数_去除空行 = ” + 到文本 (获取到的行数_去除空行 ) + “, 获取到的行数_保留空行 = ” + 到文本 (获取到的行数_保留空行 )输出文本 = 输出文本 + #换行符 + “执行两次一共耗时 ” + 到文本 (计时 ) + “ 毫秒”输出调试文本 (输出文本 )信息框 (输出文本, 0, , )|
取文本行数 | 整数型 | | |
str | 整数型 | | | | removeEmptyLine | 逻辑型 | | | | 置入代码 ({ 131, 236, 12, 139, 69, 8, 137, 69, 252, 131, 125, 252, 0, 116, 19, 185, 1, 0, 0, 0, 107, 209, 0, 139, 69, 252, 15, 190, 12, 16, 133, 201, 117, 7, 51, 192, 233, 180, 0, 0, 0, 199, 69, 248, 1, 0, 0, 0, 15, 182, 85, 12, 133, 210, 116, 29, 139, 69, 252, 15, 190, 8, 131, 249, 13, 116, 11, 139, 85, 252, 15, 190, 2, 131, 248, 10, 117, 7, 199, 69, 248, 0, 0, 0, 0, 139, 77, 252, 15, 190, 17, 133, 210, 116, 123, 139, 69, 252, 137, 69, 244, 139, 77, 252, 131, 193, 1, 137, 77, 252, 139, 85, 244, 15, 190, 2, 131, 248, 13, 116, 11, 139, 77, 244, 15, 190, 17, 131, 250, 10, 117, 81, 139, 69, 244, 15, 190, 8, 131, 249, 13, 117, 20, 139, 85, 252, 15, 190, 2, 131, 248, 10, 117, 9, 139, 77, 252, 131, 193, 1, 137, 77, 252, 15, 182, 85, 12, 133, 210, 116, 33, 139, 69, 252, 15, 190, 8, 131, 249, 13, 116, 11, 139, 85, 252, 15, 190, 2, 131, 248, 10, 117, 11, 139, 77, 252, 131, 193, 1, 137, 77, 252, 235, 215, 139, 85, 248, 131, 194, 1, 137, 85, 248, 233, 123, 255, 255, 255, 139, 69, 248, 139, 229, 93, 194, 8, 0 })返回 (0 ) 置入代码 ({ 139, 69, 8, 139, 0, 133, 192, 15, 132, 3, 0, 0, 0, 131, 192, 8, 201, 194, 4, 0 })返回 (0 )bin = 取空白字节集 (要取的字符数 ) 计次循环首 (要取的字符数, i ) bin [i ] = 取随机数 (97, 122 ) 计次循环尾 ()返回 (到文本 (bin ))
上面取文本行数的那一段机器码是下面这段c++代码编译后的机器码
这里就不贴汇编了, 贴汇编哪有贴源码舒服, 是吧
[C++] 纯文本查看 复制代码 // 取文本行数
// ptr = 文本指针, \0结尾
// removeEmptyLine = 删除空行, 为真则忽略空行
int GetTextLineCount(LPCSTR pStr, bool removeEmptyLine)
{
LPCSTR ptr = pStr;
if ( !ptr || !ptr[0] ) return 0;
int count = 1; // 文本有值, 那不管有没有换行, 最少有一行
if ( removeEmptyLine && ( *ptr == '\r' || *ptr == '\n' ) )
count = 0; // 如果第一行是空行, 且是清除空行, 那就初始行数为0
while ( *ptr )
{
const char& ch = *ptr++;
if ( ch == '\r' || ch == '\n' )
{
// \r\n 指针指向\n后面
if ( ch == '\r' && *ptr == '\n' )
++ptr;
while ( removeEmptyLine && ( *ptr == '\r' || *ptr == '\n' ) )
++ptr; // 空行的话, 换行后面就是 '\r' 或者 '\n', 这些连着的都清除
++count;
}
}
return count;
}
|