C# StreamReader.ReadLine统计行数的问题

简介: 要实现一个功能: 从 lua 文件中提取字符串放到 excel 中,再将 excel 给海外同事,翻译完成后,用翻译的文本替换相应中文。   整个功能并不复杂,要点有二点: 1、提取字符串,一行中文如“我是中文…”,中间可能会遇到”我是中文\”xx\”我是中文”,如果用正则\”[^\”]+\”则会匹配失败,思路就是先将\”替换,查找成功后再将其替换回来,excel中有三列,分别是:key、中文、待翻译文本。

要实现一个功能:

从 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

目录
相关文章
|
3月前
|
C#
C#读取txt文本的行数
C#读取txt文本的行数
129 0
|
3月前
|
开发框架 前端开发 .NET
C#编程与Web开发
【4月更文挑战第21天】本文探讨了C#在Web开发中的应用,包括使用ASP.NET框架、MVC模式、Web API和Entity Framework。C#作为.NET框架的主要语言,结合这些工具,能创建动态、高效的Web应用。实际案例涉及企业级应用、电子商务和社交媒体平台。尽管面临竞争和挑战,但C#在Web开发领域的前景将持续拓展。
150 3
|
3月前
|
SQL 开发框架 安全
C#编程与多线程处理
【4月更文挑战第21天】探索C#多线程处理,提升程序性能与响应性。了解C#中的Thread、Task类及Async/Await关键字,掌握线程同步与安全,实践并发计算、网络服务及UI优化。跟随未来发展趋势,利用C#打造高效应用。
162 3
|
15天前
|
存储 C#
揭秘C#.Net编程秘宝:结构体类型Struct,让你的数据结构秒变高效战斗机,编程界的新星就是你!
【8月更文挑战第4天】在C#编程中,结构体(`struct`)是一种整合多种数据类型的复合数据类型。与类不同,结构体是值类型,意味着数据被直接复制而非引用。这使其适合表示小型、固定的数据结构如点坐标。结构体默认私有成员且不可变,除非明确指定。通过`struct`关键字定义,可以包含字段、构造函数及方法。例如,定义一个表示二维点的结构体,并实现计算距离原点的方法。使用时如同普通类型,可通过实例化并调用其成员。设计时推荐保持结构体不可变以避免副作用,并注意装箱拆箱可能导致的性能影响。掌握结构体有助于构建高效的应用程序。
39 7
|
1天前
|
安全 C# 开发者
【C# 多线程编程陷阱揭秘】:小心!那些让你的程序瞬间崩溃的多线程数据同步异常问题,看完这篇你就能轻松应对!
【8月更文挑战第18天】多线程编程对现代软件开发至关重要,特别是在追求高性能和响应性方面。然而,它也带来了数据同步异常等挑战。本文通过一个简单的计数器示例展示了当多个线程无序地访问共享资源时可能出现的问题,并介绍了如何使用 `lock` 语句来确保线程安全。此外,还提到了其他同步工具如 `Monitor` 和 `Semaphore`,帮助开发者实现更高效的数据同步策略,以达到既保证数据一致性又维持良好性能的目标。
4 0
|
2月前
|
存储 C# 开发者
C# 编程基础:注释、变量、常量、数据类型和自定义类型
C# 编程基础:注释、变量、常量、数据类型和自定义类型
28 1
|
3月前
|
开发框架 .NET Java
探索 C#编程的奥秘与魅力
【4月更文挑战第20天】C#是微软开发的现代、面向对象的编程语言,以其简洁语法、强大功能和跨平台支持脱颖而出。它支持自动垃圾回收、泛型、委托、LINQ,并广泛应用于桌面、Web、移动和游戏开发。C#拥有活跃的开发者社区和丰富的资源,是Unity游戏开发的首选语言。随着.NET Core,C#可在多个操作系统上运行,持续创新,未来发展潜力巨大。
155 11
|
3月前
|
存储 安全 网络安全
C#编程的安全性与加密技术
【4月更文挑战第21天】C#在.NET框架支持下,以其面向对象和高级特性成为安全软件开发的利器。本文探讨C#在安全加密领域的应用,包括使用System.Security.Cryptography库实现加密算法,利用SSL/TLS保障网络传输安全,进行身份验证,并强调编写安全代码的重要性。实际案例涵盖在线支付、企业应用和文件加密,展示了C#在应对安全挑战的同时,不断拓展其在该领域的潜力和未来前景。
220 5
|
3月前
|
IDE 程序员 C#
C#编程入门:从零开始的旅程
【4月更文挑战第20天】本文引导初学者入门C#编程,从环境搭建开始,推荐使用Visual Studio Community版作为IDE。接着,通过编写&quot;Hello, World!&quot;程序,介绍基本语法,包括数据类型、运算符和表达式。文章还涉及控制结构、函数和方法,以及面向对象编程概念。通过学习,读者将对C#有初步了解,并激发进一步探索编程世界的兴趣。
94 4
|
3月前
|
设计模式 IDE 测试技术
提升 C#编程效率的技巧与方法
【4月更文挑战第20天】提升C#编程效率的关键技巧包括:选择合适的IDE(如Visual Studio)、掌握基础语法、规划良好代码结构、使用代码生成工具、复用代码、利用库和框架、定期重构、应用设计模式、避免过度设计、进行代码审查、自动化测试、学习新技术、养成良好编程习惯、定期备份代码及参与技术社区。通过这些方法,开发者能提高代码质量和开发效率。
55 5