xml的我有这个csv文件的CSV各种标签名称
name;num_tel;num_fixe;id_client;num_comd;email;city;date_liv
gwenael;0998452223;1038431234;50C;12345;[email protected];London;08/07/2015
marcel;0966442312;1038453211;31C;654321;[email protected];Pairs;08/06/2015
judith;0954674487;1045227937;23D;78965;[email protected];Toulouse;11/05/2015
paul;0998452223;1038431234;35X;19945;[email protected];Bordeaux;01/04/2015
toto;0966442312;1038453211;31Z;994991;[email protected];02/12/2015
marie;0954674487;1045227937;23C;78944;[email protected];Lille;04/08/2015
jacque;0998452223;1038431234;77C;18845;[email protected];Bruges;09/05/2015
trucmuche;0966442312;1038453211;31Z;666321;[email protected];Berlin;10/04/2015
tata;0954674487;1045227937;23D;77965;[email protected];New-york;08/07/2015
在我的情况下,这些标签名称是默认值,用户有可能到了 更多的标记名称为例,我增加城市, date_liv。所以他们添加它并生成csv。它们出现在最后一个默认标记名称(电子邮件)之后。 我想知道是否有可能使循环检查到CSV并将它们添加到XML? 我认为循环看起来像(i = 7;我< = NF; i ++){}?但如何做到这一点? 这里是我做的,你能帮助我很好地形成它,请我有这么多的错误
BEGIN {
FS=";"
documentEnclosingTag = "rows"
c_flds["id_client"];c_flds["name"];c_flds["num_cmd"];c_flds["num_tel"];d_flds["email"]
d_flds["id_client"];d_flds["name"];d_flds["num_fixe"];d_flds["num_tel"];
print "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
printf "<%s>\n", documentEnclosingTag
}
FNR==1 { gsub(" ", ""); for(i=1; i<=NF; i++) cols[$i]=i; next }
var = $(cols["ID_client_proxy"])
if (var ~ /C/)
{ print createObject("C", c_flds) }
else { print createObject("D", d_flds) }
END { printf "</%s>\n", documentEnclosingTag }
#----------- functions -----------
function createObject(enclosingTag, flds,key, s) {
for(key in flds) {
s = s "\t" wrapData(key, $(cols[key])) "\n"
}
return(wrapData(enclosingTag, "\n" s))
}
function wrapData(enclosingTag, data) {
return(sprintf("<%s>%s</%s>", enclosingTag, data, enclosingTag))
}
你应该习惯测试你发布的脚本以及显示所需的输出。在这种情况下,我对另一个问题很熟悉。您也可能希望将测试数据缩短为一个标题,一个“C”和一个“D”。 – n0741337 2015-04-05 17:44:56