在大多数情况下,CSV文件是以逗号分隔记录的文本文件。但是,有时这些文件会以分号分隔。(如果区域设置将小数分隔符设置为逗号,则Excel在保存CSV时将使用分号分隔符--这在欧洲很常见。参考:http://en.wikipedia.org/wiki/Comma-separated_values#Application_support)
我的问题是,让程序猜测是用逗号还是分号分隔的最好方法是什么?
例如,像1,1;1,1这样的行可能是不明确的。它可以解释为逗号分隔为:1 1;1 (字符串)1
或分号分隔为1,1,1,1
到目前为止,我最好的猜测是同时使用、和;分隔符解析文件,然后选择与第一行(通常是标题行)具有相同长度的最多行的解析。如果两者的行数相同,请选择列数较多的那个。这样做的主要缺点是额外的开销。
有什么想法?
发布于 2010-05-07 23:33:02
根据你正在使用的是什么,如果你保证有一个标题行,你尝试两者的方法,可能是最好的总体实践。然后,一旦您确定了发生了什么,如果您进一步到达没有所需列数的行,那么您就知道格式不正确。
通常,我会将其视为上传时用户指定的选项,而不是编程测试。
发布于 2010-08-04 03:54:58
如果每一行都应该有相同的列数,我相信这就是Excel的情况,那么,使用逗号和分号,计算出第N行和N+1行的列数。无论哪种方法(逗号或分号)产生不同的答案都是错误的(不是文件的格式)。你可以从头开始,直到其中一个被证明是不正确的。您不需要标题行或其他任何东西。您不必读取超过必要的文件,并且它永远不会为您提供文件格式的错误答案,它可能只是到达末尾而尚未得出结论。您所需要做的就是让每一行都有相同的列数属性。
发布于 2011-12-15 07:01:20
你可以读第一行
FileReader fileReader = new FileReader(filePath);
BufferedReader bufferedReader = new BufferedReader(fileReader);
String s = bufferedReader.readLine();
String substring = s.substring(s.indexOf(firstColumnName) + 3, s.indexOf(firstColumnName) + 4);
bufferedReader.close();
fileReader.close();
substring.charAt(0);然后捕获这个值
substring.charAt(0)
根据CSV是逗号还是分号,可以使用最后一个值
https://stackoverflow.com/questions/2789695
复制相似问题