我有这种奇怪的情况,我必须水平阅读.所以我得到一个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)
带嵌入逗号的字段必须包含在双引号字符中.
Run Code Online (Sandbox Code Playgroud)1997,Ford,E350,"Super, luxurious truck"
具有嵌入式双引号字符的字段必须包含在双引号字符中,并且每个嵌入的双引号字符必须由一对双引号字符表示.
Run Code Online (Sandbox Code Playgroud)1997,Ford,E350,"Super ""luxurious"" truck"
更糟糕的是,引用字段可能嵌入了换行符(换行符;"\n"):
嵌入换行符的字段必须包含在双引号字符中.
Run Code Online (Sandbox Code Playgroud)1997,Ford,E350,"Go get one now they are going fast"
这演示了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)
归档时间: |
|
查看次数: |
9299 次 |
最近记录: |