【问题标题】:Remove invisible carriage return from CSV using javascript使用javascript从CSV中删除不可见的回车
【发布时间】:2018-06-14 04:23:03
【问题描述】:

我尝试在 Google Apps Script (Google Sheets) 中解析 CSV,代码如下:

var file = DriveApp.getFileById('xx');
var blobasstr = file.getBlob().getDataAsString();
var csvData = Utilities.parseCsv(blobasstr);

除了单元格内的 CSV 中有不可见的回车符之外,一切正常,这会导致在单元格中间创建额外的行。 这些回车是由于源数据包含具有两条地址线的单元格(以及中间的回车)这一事实的结果。当我在记事本中打开 CSV 时,我必须输入两次光标才能越过这一点,这加强了我的想法,即那里有一个隐藏的回车。

我可以在我的 blobasstr 上使用正则表达式来删除这些不可见的回车符,但当然可以在每行的末尾保留通常的回车符吗?


编辑:感谢您提及之前的问题。使用正则表达式:

blobasstr.replace(/(?=["'])(?:"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]\r\n(?:\\[\s\S][^'\\]\r\n)*')/g, '\\r\\n');

我确实能够删除“隐藏”的回报,这是一个很好的开始。问题是我现在在具有不可见返回的单元格中得到文本 \r\n (而不是单元格的原始内容,这可能是由替换参数 '\ r\n' 有没有替代方法可以保留单元格的原始内容(当然没有隐藏的回车?)非常感谢!


非常感谢您的帮助!

克里斯

【问题讨论】:

标签: javascript regex csv google-apps-script


【解决方案1】:

记事本需要 dos 行结尾 \r\n 并且不处理 unix 行结尾单个 \n,我可以使用带有 \n 的简单文件重现行为,光标必须键入两次才能前进。

似乎 Utilities.parseCsv 无法处理多行单元格,因为无法指定可选的封闭字符,例如 "

【讨论】:

    【解决方案2】:

    这就是最终为我所做的:

    var blobasstr = blobasstr2.replace(/(?=["'])(?:"[^"\]*(?:\[\s\S][^"\]*)*"|'[^'\]\r\n(?:\[\s\S][^'\]\r\n)*')/g, function(match) { return match.replace(/\n/g,"")} );
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 2018-03-18
      • 2015-12-10
      • 1970-01-01
      • 2016-05-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多