在java中解析CSV

yog*_*sma 6 java csv date

我有这种奇怪的情况,我必须水平阅读.所以我得到一个csv文件,其中包含横向格式的数据.如下所示:

CompanyName,RunDate,10/27/2010,11/12/2010,11/27/2010,12/13/2010,12/27/2010....
Run Code Online (Sandbox Code Playgroud)

RunDate之后显示的所有日期都是运行日期字段的值,我必须在系统中更新该公司的该字段.日期值不是固定号,它们可以是单值到10到n的数字.所以我需要读取所有这些值并在系统中更新.我用Java写这个.

小智 9

字符串,拆分(",")不太可能工作.
它将分割具有嵌入逗号("Foo,Inc.")的字段,即使它们是CSV行中的单个字段.

如果公司名称是:
        Company,Inc.
或更糟:
        Joe的"好,快,便宜"的食物 怎么办?


根据维基百科:(http://en.wikipedia.org/wiki/Comma-separated_values)

带嵌入逗号的字段必须包含在双引号字符中.

   1997,Ford,E350,"Super, luxurious truck"
Run Code Online (Sandbox Code Playgroud)

具有嵌入式双引号字符的字段必须包含在双引号字符中,并且每个嵌入的双引号字符必须由一对双引号字符表示.

   1997,Ford,E350,"Super ""luxurious"" truck"
Run Code Online (Sandbox Code Playgroud)


更糟糕的是,引用字段可能嵌入了换行符(换行符;"\n"):

嵌入换行符的字段必须包含在双引号字符中.

   1997,Ford,E350,"Go get one now  
   they are going fast"
Run Code Online (Sandbox Code Playgroud)



这演示了String,split(",")解析逗号的问题:

CSV行是:

a,b,c,"Company,Inc.",d,e,"Joe's""Good,Fast,and Cheap""Food",f,10/11/2010,1/1/2011,g,h,一世


// Test String.split(",") against CSV with
// embedded commas and embedded double-quotes in
// quoted text strings:
//
// Company names are:
//        Company, Inc.
//        Joe's "Good, Fast, and Cheap" Food
//
// Which should be formatted in a CSV file as:
//        "Company, Inc."
//        "Joe's ""Good, Fast, and Cheap"" Food"
//
//
public class TestSplit {
    public static void TestSplit(String s, String splitchar) {
        String[] split_s    = s.split(splitchar);

        for (String seg : split_s) {
            System.out.println(seg);
        }
    }


    public static void main(String[] args) {
        String csvLine = "a,b,c,\"Company, Inc.\", d,"
                            + " e,\"Joe's \"\"Good, Fast,"
                            + " and Cheap\"\" Food\", f,"
                            + " 10/11/2010,1/1/2011, h, i";

        System.out.println("CSV line is:\n" + csvLine + "\n\n");
        TestSplit(csvLine, ",");
    }
}
Run Code Online (Sandbox Code Playgroud)


产生以下内容:


D:\projects\TestSplit>javac TestSplit.java

D:\projects\TestSplit>java  TestSplit
CSV line is:
a,b,c,"Company, Inc.", d, e,"Joe's ""Good, Fast, and Cheap"" Food", f, 10/11/2010,1/1/2011, g, h, i


a
b
c
"Company
 Inc."
 d
 e
"Joe's ""Good
 Fast
 and Cheap"" Food"
 f
 10/11/2010
1/1/2011
 g
 h
 i

D:\projects\TestSplit>
Run Code Online (Sandbox Code Playgroud)



应将 CSV行解析为:


a
b
c
"Company, Inc."
 d
 e
"Joe's ""Good, Fast, and Cheap"" Food"
 f
 10/11/2010
1/1/2011
 g
 h
 i
Run Code Online (Sandbox Code Playgroud)


Jig*_*shi 4

正如其他人建议的分割和解析,您可以使用opencsv

对于简单数据,用“,”分割它们并解析它,然后使用List将所有这些值相加。