Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google apps script parseCsv()和#x27;无法分析文本';(谷歌应用程序脚本)_Google Apps Script - Fatal编程技术网

Google apps script parseCsv()和#x27;无法分析文本';(谷歌应用程序脚本)

Google apps script parseCsv()和#x27;无法分析文本';(谷歌应用程序脚本),google-apps-script,Google Apps Script,我真的很困惑,因为这是工作较早,我不知道为什么它是打破了现在。我正试图解析CSV文件。我使用以下代码访问它们: var file = DriveApp.getFileById(fileID); var csv = file.getBlob().getDataAsString(); var data = Utilities.parseCsv(csv); 它在第三条线上崩溃了。调试时,我看到一切正常文件是一个对象,csv是一个字符串,根据预览,我认为csv的格式看起来是正确的('header1,h

我真的很困惑,因为这是工作较早,我不知道为什么它是打破了现在。我正试图解析CSV文件。我使用以下代码访问它们:

var file = DriveApp.getFileById(fileID);
var csv = file.getBlob().getDataAsString();
var data = Utilities.parseCsv(csv);
它在第三条线上崩溃了。调试时,我看到一切正常<代码>文件是一个对象,
csv
是一个字符串,根据预览,我认为csv的格式看起来是正确的(
'header1,header2,header3 data1,data2,data3 data4,data5,data6…
等)。然而,
数据
是未定义的。是什么导致了这个错误?我在网上找不到什么,调试也没有给我提供任何好的见解

CSV中是否有可能破坏此功能的特定符号?CSV数据中有
符号……但我不知道这有什么关系

更新: 我正在讨论的文件大约有16000行。我目前正在分段处理它,试图缩小问题的范围。但它不是引号;我使用解析器运行了一个测试,如下所示,它按预期工作:

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);
}
x,y
test""123,456
abc' 'def,ghi

[[x, y], [test""123, 456], [abc' 'def, ghi]]
日志文件如下所示(预期):


如果您有更多的想法来测试可能导致此问题的原因,我可以测试它们。

我尝试过测试您的函数,稍微修改一下,它看起来可以正常工作。这是我使用的一个。如果您可以与我们共享数据文件,我很乐意看看这个问题

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);
 }
} 
函数prrrrse()
{
var br='
'; 变量a='测试'123456\n'; var b=“abc”“定义,ghi\n”; var h='x,y\n'; var-str=h+a+b; 变量分隔符=','; var csv=Utilities.parseCsv(str,分隔符); var s='str='+str+br+'delimiter='+delimiter+br;
对于(var i=0;i,不管它值多少钱,我只是遇到了一个类似的问题,在试图找到一个错误的逗号后,最终得到了一个更简单的解决方案。csv中的18000行(20000+中的某行)不知何故有一个额外的换行符(
\n
)在它中。消除换行符解决了问题。

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

引号很重要。尝试用双引号替换外部引号,并且字符串中不再有双引号,然后检查。我更新了我的问题。在文件本身中测试这一点确实很困难,但我在单独的测试函数中测试了这两种情况,效果很好。仍然手动查找问题…谢谢,unfo很自然,我发现了这个问题…事实上,在一些数据中确实存在逗号。我想是时候仔细检查一下,并找出在创建csv文件时如何删除这些逗号了。但是如果有人需要知道如何找到哪些数据行的逗号数不正确,请在记事本++中打开csv,点击Ctrl-F,更改
搜索模式
正则表达式
标记的选项卡
将查找所有带有6个逗号的实例。将6更改为您应该具有的数量。然后标记所有并查找未突出显示的行。是的,我定期使用编辑器Ultraedit来解决类似问题。事实上,我经常尝试从数据中极不可能找到的字符中选择wierd分隔符。
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);
 }
}