这是偶第二次自己写对外部的技术文档:
这次公司要开发一个有关从外部读取权限信息。
牵涉到了文件的解析。
在文件的解析中,最麻烦的可能就数对一些控制符号的理解了。
而首当其冲的就是换行符号'\n'与回车符号"\r".
google找到了这么一段信息:
换行符就是另起一行,回车符就是回到一行的开头,所以我们平时编写文件的回车符应该确切来说叫做回车换行符
'\n' 10 换行(newline)
'\r' 13 回车(return)
在windows系统下,回车换行符号是"\r\n".但是在Linux等系统下是没有"\r"符号的。
在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要判定"\r\n"又要判定"\n"。
现在还是对它很模糊的概念, 那么我们写个测试的代码吧!
bool checkLineSymbol() {
char *fileStr;
Int32 length = 0;
Int32 i =0;
Int32 number = 0;
fileStr = loadPolicyFile();
if(fileStr == NULL) {
return false;
}
length = cStrlen(fileStr);
cTrace("file char length: \n");
cTrace("%d\n", length);
for(i = 0; i < length; i++) {
number = (Int32)(*(fileStr + i));
cTrace("number: %d\n", number );
}
cTrace("test checkLineSymbol is end!\n");
}
代码看不懂没有关系, 上面的代码主要功能是从一个txt文件中输出每个字符的数字。我的这个文本文件中主要是写入了“\n”两个字符,同时进行了一个回车的操作。我想看一下输出的结果是什么。最后输出的结果,显示有4个字符, 分别是92, 110,13, 10。也就是说我只是写入了2个字符,但是通过文件操作函数的read,它给我读出了4个字符。那么这三个数字分别代表什么呢。
我去查了一下assII码表,92 为‘\’, 110为 'n', 13与10是控制符号,分别是'cr','nl'。说明了当我们在编辑文本文件(nodepad)的时候。每次调入一个回车键的时候,nodepad编辑器自动给我们加了13,10两个控制符号。
后来我又使用了vim文本编辑器进行相同的编辑,输出的结果为92, 110, 10三个字符。说明vim编辑器里面,敲入一个回车键, 该编辑器只是给我们添加了一个10控制符号来表示换行。
这里我引出一个话题, 那就是notepad编辑器为什么在敲入回车键的时候,微软工程师们要加入一个\r呢。而vim也就是Linux帮派不加入这个控制符号呢? 这里面有什么猫腻, 就由读者你自己去研究了。我就不管这些东东了。等你研究出来我google罗。哈哈
bool checkLineNumber() {
char nL = '\n';
char rL = '\r';
Int32 number = 0;
number = (Int32)nL;
cTrace("\\n in code number is: \n");
cTrace("%d\n", number);
number = (Int32)rL;
cTrace("\\n in code number is: \n");
cTrace("%d\n", number);
cTrace("test checkLineNumber is end");
}
上面这段代码,主要是说明一下,我们在编写代码中。有一个叫字符转义符号的问题。通常我们在解析文件中的数据的时候,都要判断文件是否需要换行。这样我们就知道那里是换行,那里不换行了。以为我们以后的逻辑处理。
那么为什么要引入字符转义符号呢?个人觉得主要是为了方便记忆吧。'\r',代表回车符号。 '\n'代表换行,外文也就是newLine,老外搞的一套东东。代码在进行编译的时候,编译器会做处理,把'\r'转成13。
其实我们完全可以写成char nL = 13;来代表这个字符是回车符号。但是char nL = '\r'比较直观。这里我做一个猜测:在编译C阶段,char nL = 13;这段代码行可能比char nL = '\r'快。因为编译器要对后一个代码做一些额外的处理。当然这是没有必要的,因为毕竟这些消耗是可以忽略不记的,相对现在的计算机处理速度。
好了,现在说说我上面代码的功能吧,主要是看看'\r'与'\n'分别是什么值。输出的结果是'\r'为转义成了13, '\n'被转义成了10.
now,分析完毕!大致有了个了解了, 我要开始写代码了。呵呵,你懂了么?
分享到:
相关推荐
我到公司后先测试一下客户给我的错误示例(果然搜不到),然后排查一下昨天的数据是否有问题,发现昨天客户用excel导入的数据中,存在很多\r\n这种换行符和回车符。 如:库中数据为:“换行符\n换行符\n换行符”,...
今天在编写99乘法在线小游戏(看过我的 linux下c实现的数据库备份(第四版)应该知道我在那里提过^.^)的时候遇到读取文件的信息遇到回车换行符的烦恼。 比如我文件里面有如下信息: name=qizexi sex=man 我希望读取...
在textarea中输入回车符 在js读取textarea中的值有\r\n然后到业务层转换到string中就有可能变成空格形式然后被存入数据库,当在取出此值的时候则会变成空格的形式,因此我们需要将不显示的\r\n替换一下。
中的回车符给困扰着, 回车换行的内容(\r\n)经常需要显示为HTML中的 ,这时就需要做替换操作了。 如果只是简单的将字符串strObj调用replace()方法,则结果只替换第一个回车符, 问题不难,关键是得...
主要介绍了正则表达式.号元字符(除了回车符r和换行符n),需要的朋友可以参考下
C#中,读取文本文件内容,里面往往有许多回车换行符(“\r\n”),虽然一般不可见,但却实实在在的存在。这时候,使用正则表示式进行匹配,需要考虑其存在。今天就遇到这样一个问题: 有文本文件内容如下: DT ...
Unix/Linux使用的是LF,Mac后期也采用了LF,但Windows一直使用CRLF【回车(CR, ASCII 13, \r) 换行(LF, ASCII 10, \n)】作为换行符。而git入库的代码采用的是LF格式,它考虑到了跨平台协作的场景,提供了“换行符自动...
首先,你需要知道不同的操作系统对换行符的定义会有所不同,Unix或类Unix操作系统的换行符叫做LF,而windows系统的叫做CRLF,二者具有很大的区别:Unix系统里,每行结尾只有“<换行>”,即"n";Windows系统里面,...
今天写这个,要用python去除字符串中的换行符并写入文件,网上查阅,就一句代码replace(\n,),加上之后,搞了半天,还是不对。 以上是我今天遇到的问题,以下是解决方案。 本地测试是window系统,正式用的时候是unix...
1.必须知道textarea中的换行符是 \n (个人检测发现按回车键是\n,好像在linux下是\r\n) 2.用nl2br之前,请仔细看好手册解释,我就是搞郁闷了,一般都理解为将\n转换成 ,其实不是的: 看php手册解释: nl2br – ...
可以去掉 空格和 换行 void CMainFrame::OnTrim() { FILE *pfile=fopen("a.txt","r+"); //CString strin("s"); //fwrite(strin,1,1,pfile); fseek(pfile,0,SEEK_END); int len=ftell(pfile); char * buf; ...
‘↵’是回车符’/n’,这段内容是通过textarea人为编辑,提交给后端保存的。编辑框中可以识别的字符,在普通的标签里面没办法识别到,所以要转换成可以识别的 方法1 string.replace(/(rn|n|r)/gm, ) 然后再用...
让您彻彻底底搞清楚回车符(0x0d)与换行符(0x0a)的区别!
下面进行相关说明:首先说说 n,r,tn 软回车:在Windows中表示换行且回到下一行的最开始位置在Linux/unix中只表示换行,但不会回到下一行的开始位置r 软空格:在Linux/unix 中表示返回到当行的最开始位置在Mac OS中表示...
一首先说说 \r 与\n的区别回车”(Carriage Return)和“换行”(Line Feed)这两个概念的来历和区别。在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33,Linux/Unix下的tty概念也来自于此)的玩意...
最近在做cocos2d-x的简明配置,发现有的朋友的文本编辑器,自动将\r\n截断成\n,(在unix上换行使用\n,windows上,换行使用的是\r\n)于是,写了这个脚本,希望对一些朋友有所帮助,不用一行一行去改 import os ...
C# SuperSocket 手把手教你入门 傻瓜教程---10...2、由于使用了CountSpliterReceiveFilter - 固定数量分隔符协议,因此KEY和BODY之间的分隔符为#,参数之间的分隔符也为#,而且字符串结尾不需要添加回车换行符\r\n。
\n:换行符,移动到下一行开头。 \t:制表符,移动到当前行的下一个制表符位置。 \b:退格符,将光标移动到前一个字符位置。 \r:回车符,将光标移动到行首。 \f:换页符,将光标移动到下一页开头。 \0:空字符,...