首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Utilities.parseCsv()“无法解析文本”(Google脚本)

Utilities.parseCsv()“无法解析文本”(Google脚本)
EN

Stack Overflow用户
提问于 2017-03-28 11:04:41
回答 4查看 8.8K关注 0票数 2

我真的很困惑,因为这之前起作用了,我不知道为什么现在坏了。我有CSV文件,我正试图解析。我使用以下代码访问它们:

代码语言:javascript
复制
var file = DriveApp.getFileById(fileID);
var csv = file.getBlob().getDataAsString();
var data = Utilities.parseCsv(csv);

它会在第三行崩溃。当调试时,我看到一切看起来都很正常..。file是一个对象,csv是一个字符串,基于预览,我认为该格式对于CSV ('header1,header2,header3 data1,data2,data3 data4,data5,data6...'等)来说是正确的。然而,data是未定义的。是什么导致了这个错误?我在网上找不到多少东西,调试也没有给我提供任何好的洞察力。

CSV中是否有特定的符号会破坏这一功能?在CSV数据中有'"符号.但我不知道这有什么关系。

更新:有问题的文件大约有16000行。目前,我正在分阶段研究,试图缩小问题的范围。但这不是引号;我在解析器中运行了一个测试,测试结果如下所示:

代码语言:javascript
复制
function myFunction() {
  var a = 'test""123,456\n';
  var b = "abc' 'def,ghi\n";
  var h = 'x,y\n';
  var str = h+a+b;
  var csv = Utilities.parseCsv(str);
  Logger.log(str);
  Logger.log(csv);
}

日志文件看起来如下(预期):

代码语言:javascript
复制
x,y
test""123,456
abc' 'def,ghi

[[x, y], [test""123, 456], [abc' 'def, ghi]]

如果您有更多的想法来测试可能导致这种情况的原因,我可以对它们进行测试。

EN

回答 4

Stack Overflow用户

发布于 2017-03-28 19:21:21

我试过测试您的功能,稍微修改一下,它看起来很好。这是我用的那个。如果您能够与我们共享数据文件,我将很高兴看到这个问题。

代码语言:javascript
复制
function prrrrse() 
{
  var br = '<br />';
  var a = 'test""123,456\n';
  var b = "abc' 'def,ghi\n";
  var h = 'x,y\n';
  var str = h+a+b;
  var delimiter = ',';
  var csv = Utilities.parseCsv(str,delimiter);
  var s = 'str=' + str + br + 'delimiter=' + delimiter + br;
  for(var i = 0;i<csv.length;i++)
  {
    s+='csv[' + i + ']=';
    for(var j=0;j<csv[i].length;j++)
    {
      if(j>0)s+=' , ';
      s+=csv[i][j];
    }
    s+= br;
  }
  dispStatus('Parsing',s, 800, 600); 
}


function dispStatus(title,html,width,height,modal)
{
  var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
  var width = typeof(width) !== 'undefined' ? width : 400;
  var height = typeof(height) !== 'undefined' ? height : 300;
  var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
  var modal = typeof(modal) !== 'undefined' ? modal : false;
  var htmlOutput = HtmlService
     .createHtmlOutput(html)
     .setWidth(width)
     .setHeight(height);
 if(!modal)
 {
   SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
 }
 else
 {
   SpreadsheetApp.getUi().showModalDialog(htmlOutput, title);
 }
} 
票数 1
EN

Stack Overflow用户

发布于 2018-08-15 14:01:29

至于它的价值,我只是出现了一个类似的问题,并试图找到一个错误的逗号,最后得到了一个更简单的解决方案。第18,000行-在csv中有一个额外的行间隔(\n) (在csv中)。消除断线解决了这个问题。

票数 1
EN

Stack Overflow用户

发布于 2019-01-04 22:23:15

今天,我处理了同样的问题,发现一些行尾的尾随空格导致解析器失败。我用以下正则表达式解决了这个问题:csvString.replace(/[ \t]+$/gm, '')

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43067877

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档