【问题标题】:Change string to only one line i csv将字符串更改为仅一行 i csv
【发布时间】:2018-04-27 09:15:43
【问题描述】:

我有一个 csv 文件,其中每条记录都是一行。问题是有时一个单元格的行数很少。例如:

 first;second;third;something something something something;four
 first;second;third;something
 something 
 something something;four

我在 Notepad++ 中打开它,我看到记录的末尾有 LF 白色标签,而单元格中的新行有 CR 白色标签。

如何删除此 CR 白色标签?转换后我想拥有:

first;second;third;something something something something;four
first;second;third;something something something something;four

【问题讨论】:

  • 您的描述表明该文件根本不应该有任何CRs。因此,如果这是您需要做的一次性修复,请使用 Notepad++ 在扩展搜索模式下搜索 \r 并替换为空(或文件中缺少的空格。如果此问题再次发生,您应该更正问题的根源。如果您想在程序中以编程方式解决此问题,请扫描数据并删除所有CRs
  • 谢谢 - 我应该如何找到 CR? StringReplace(MyString, ????, '');
  • 您确定这些 CR 不是内容的一部分吗?也许这些列包含多行字符串。
  • @Zhorov 不,CR 是 #13,而不是 #10。使用您的代码,他将删除 LF。 s := StringReplace(s, #13, '', [rfReplaceAll]) 将删除 CR。
  • @dummzeuch 对不起,我的错误。当然 CR 是 #13,所以 s := StringReplace(s, #13, '', [rfReplaceAll])。感谢您的评论。

标签: csv delphi pascal lazarus freepascal


【解决方案1】:

答案 1:前提是您可以唯一标识要删除换行符的位置

查找:“(行尾的模式 1)\r\n” - 替换为“\1”

或查找:“(行尾的模式 1)\r\n(下一行开始的模式 2)\” - 替换为“\1\2”

答案 2:如果您可以确定要保留换行符的位置

查找:“(行尾的模式 1)” - 替换为“\1QAZ”,其中“QAZ”不在文件中的任何位置。继续,直到您需要的任何地方都出现“QAZ”

通过查找“\r\n”删除所有新行 - 替换为空。

通过查找“QAZ”恢复所需的新行 – 替换为“\n” – windows Notepad++ 不需要 \r

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    相关资源
    最近更新 更多