【问题描述】
CSV(逗号分隔值)这种文件格式可以在不同的应用程序间做数据交换用,因为曾被用于微软的电子表格(Excel),并逐渐成为一种行业伪标准,甚至也被应用于其它非微软平台上。
本题中的CSV文件格式是这样定义的:
1、一个CSV文件包含0行或多行记录,每一个记录包含0个或多个字段(域)。
2、每一个记录都以一个换行符结尾(ASCII/LF=0X0A)。
当然,一个字段中可能包含自带的换行符(参见下面),所以一个记录也可能跨越多行。
3、字段之间以逗号(英文半角)分隔。
例:Jonh,Doe,120 any st.,"Anytown, WW",08123
4、如果一个字段未用双引号引起来,那么该字段开头或结尾的空格将被忽略。
比如,John, Doe,…就可以变成"John"和"Doe",等等……空格可以是空格键或者Tab键。
5、字段中若有自带的逗号,则必须用双引号引起来。
在上例中,"Anytown, WW"必须加双引号,因为它中间有一个自带的逗号。
6、字段中若有自带双引号,则该字段必须整体被双引号括起来,同时对于原来自带的双引号,每一个双引号都要被替换成两个连续的双引号。
比如,John "Da Man" Doe将被转换成"John ""Da Man"" Doe",120 any st.,…
7、如果一个字段中包含自带的换行,则该字段必须完整地用双引号括起来。
比如,
字段1:Conference room 1
字段2:John,
Please bring the M.Mathers file for review
-J.L.
字段3:10/18/2002
…
该记录可以转换为:
Conference room 1,"John,
Please bring the M.Mathers file for review
-J.L.
",10/18/2002,…
注意这是符合CSV格式的单个记录,尽管它跨越了多行,因为字段中有自带的换行。
8、字段中若开头或结尾要用空格,则该字段需加双引号。
如:为了保持开头与结尾的空格,John, Doe ,…要被写为John," Doe ",…
9、字段可以总是用双引号括起来,而双引号也总是可以被去掉。
你的任务是写一个程序做为CSV文件解析程序,对输入的CSV格式的文件做解析。
【输入格式】
你的程序需要读入输入文件,并参考CSV文件格式对输入内容加以解析,输入以EOF结束。
每一个字段的字符数均不超过50,输入文件中最多有500个字段。
【输出格式】
如果输入文件不是一个符合CSV格式的文件,输出“Wrong Format”,否则你需要输出所有的字段,每一个字段输出完毕请加上一个换行(‘ ’),例如,假定输入文件如下:
field11,field12,...,field1n
field21,field22,...,field2n
…
fieldm1,fieldm2,...,fieldmn
则输出必须为:
field11
field12
...
field1n
field21
field22
...
field2n
…
fieldm1
fieldm2
...
fieldmn
注意字段中可能会有自带的换行符,所以在输出文件中一个字段可能会占若干行(具体细节你可以参考下面的样例3)。
【输入样例】
输入文件名:parser1.in
field11,field12
field21,field22
输出文件名:parser1.out
field11
field12
field21
field22
输入文件名:parser2.in
John, Doe , "Anytown, WW" , "John ""Da Mon"" Von"
输出文件名:parser2.out
John
Doe
Anytown, WW
John "Da Mon" Von
输入文件名:parser3.in
Conference room 1,"John,
Please bring the M.Mathers file for review
-J.L.
",3/20/2006
输出文件名:parser3.out
Conference room 1
John,
Please bring the M.Mathers file for review
-J.L.
3/20/2006
注意:
在这个样例中,输入文件中的第二个字段被双引号括起来了,于是在中间可以有换行符,也因此该字段在输出文件中看起来跟在输入文件中一样,不要忘了在该字段输出完毕、第三个字段输出之前加一个换行。
输入文件名:parser4.in
John, "Wrong field" sample", Bob
输出文件名:parser4.out
Wrong Format