博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# StreamReader.ReadLine统计行数的问题
阅读量:6594 次
发布时间:2019-06-24

本文共 1091 字,大约阅读时间需要 3 分钟。

要实现一个功能:

从 lua 文件中提取字符串放到 excel 中,再将 excel 给海外同事,翻译完成后,用翻译的文本替换相应中文。

 

整个功能并不复杂,要点有二点:

1、提取字符串,一行中文如“我是中文…”,中间可能会遇到”我是中文\”xx\”我是中文”,如果用正则\”[^\”]+\”则会匹配失败,思路就是先将\”替换,查找成功后再将其替换回来,excel中有三列,分别是:key、中文、待翻译文本。

2、替换 lua 文件中的中文,先将 excel 读出来放到 Dictionary<string, string[]>对象中,然后逐行读取 lua 文件,拿到 key、中文,再从 Dictionary 中查找,满足条件后则进行替换。

 

以繁体为例

为了防止出现:新增了一个 key,或者某个 key 对应的中文有修改,所以在替换的时候有严格的检查。必须该行的 key、value,都存在于 excel 中,才替换相应的内容(仅一次)。

str9999="我是中文"--[["我是中文"]]

 

用string.Replace操作时,上面“我是中文”全部都被替换,不是所期望的。假设韩文或者越南文,我们肯定希望知道这个字符串所表示的含义,故特地将中文保留下来。new Regex().Replace 方法处理字符串嵌套比较麻烦,最后改为 string.Remove().Insert() 来处理。

 

讲到这里,基本都是在讲该功能的一些实现细节。在替换我提交SVN的时候,我就发现,明明该lua文件有3405行,但只显示3404行,最后一行是换行符,被干掉了。然后我查代码,发现没问题,被狗吃了?

如果最后一行改为字符串,如a,行数显示正常。

如果我额外加5行,显示结果是3409,说明加的5行都识别了,并没有对我添加的换行有特殊处理。

 

但最后一行换行就是不被读取。所以,我怀疑ReadLine方法压根就没读最后一行。查了一下官方文档,找到了答案:

将行定义为后面的字符后跟一条线序列︰ 换行符 ("\n")、 回车符 ("\r") 或回车符后跟一条线换行符 ("\r\n")。 返回的字符串不包含终止回车或换行。 返回的值是 null 如果到达了输入流的末尾。

 

所谓“终止”回车或换行,指的就是上面遇到的,文件最后一行是如果是换行\回车,它不会读取最后一行。

 

如果使用ReadLine对文件进行行数统计,需要注意最后一个终止回车/换行并不会被读取,不然得到的行数永远会少1

转载于:https://www.cnblogs.com/meteoric_cry/p/8426625.html

你可能感兴趣的文章
BZOJ2794 : [Poi2012]Cloakroom
查看>>
Git查看、删除、重命名远程分支和tag【转】
查看>>
浅谈IM软件业务知识——非对称加密,RSA算法,数字签名,公钥,私钥
查看>>
Oracle中REGEXP_SUBSTR及其它支持正则表达式的内置函数小结
查看>>
正确计算linux系统内存使用率
查看>>
关于MapReduce单词统计的例子:
查看>>
【php】利用php的构造函数与析构函数编写Mysql数据库查询类 (转)
查看>>
导出DLLRegisterServer接口遇到的问题
查看>>
压缩算法
查看>>
ios和android的发展前景比较
查看>>
[转载]SpringMVC的Model参数绑定方式
查看>>
Linux socket多进程服务器框架三
查看>>
Debug.print的用法
查看>>
常用名词
查看>>
第一百三十四节,JavaScript,封装库--遮罩锁屏
查看>>
【转】cookie如何共享到各个浏览器
查看>>
自制基于HMM的python中文分词器
查看>>
如何在Root的手机上开启ViewServer,使得HierachyViewer能够连接
查看>>
RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2-新增锁定用户与解除锁定用户的功能...
查看>>
vue1.0 的过滤器
查看>>