2017-08-10 58 views
0

对于一个项目我必须通过使用xml格式的其余(curl)将csv文件的数据从websystem中获取。 我得到了几乎所有的工作,但一件事。将CSV元素以新行保存到数组

我为这个项目收到的文件是一个.xlsx文件。我将它导出到.csv文件(分隔符分隔)并将编码转换为UTF-8。原始文件大约有2000行和30列。

我的策略是“剪切”.csv文件的字段,并将输出保存到带有bash(4.3.42)脚本的阵列(我之前没有使用Python;))(SLES12 SP2这是一台测试机)。

csv采用以下格式(简化): (注意:在一个单元格中有三行的描述,这是打破我的脚本的部分。)curl命令创建这些新的虚假条目,线。

Simplified CSV

关于四分之一的数据的具有类似的描述。

导出为CSV之后,这是该文件的样子,如果我用vim打开它:

title|description|firstname 
Test|Lorem ipsum dolor sit amet, 
consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat 
sed diam voluptua.|Chris 

这是我简单的脚本:

file="Kontakte.csv" 

# Get the values from the file 
arrV[1]=$(cut -d'|' -f1 "$file" | cut -d$'\n' -f2) # Title 
arrV[2]=$(cut -d'|' -f2 "$file" | cut -d$'\n' -f2) # Description 
arrV[3]=$(cut -d'|' -f3 "$file" | cut -d$'\n' -f2) # First name 

echo "### Values ###" 
# For reference 
echo "Title: " ${arrV[1]} 
echo "Description: " ${arrV[2]} 
echo "Name: " ${arrV[3]} 

我得到的是.. 。

### Values ### 
Title: Test 
Description: Lorem ipsum dolor sit amet, 
Name: Chris 

,而不是类似的东西...:

### Values ### 
Title: Test 
Description: Lorem ipsum dolor sit amet,\n onsetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat\n sed diam voluptua. 
Name: Chris 

我有一个vba脚本来摆脱新行,但将是一个不太理想的解决方案。

这将是很好,只是把周围的处决一些报价,使其工作,如:

arrV[2]="$(cut -d'|' -f2 "$file" | cut -d$'\n' -f2)" 

但我coudn't解决这样的问题。

你有什么想法,该怎么做这些新行?或者在Excel中预先删除新行是我唯一的选择?

预先感谢您。

回答

0

您正在使用面向行的工具,因此嵌入\n会造成麻烦并不奇怪。选择一个像〜的字符,然后使用grep来验证它没有出现在你的.csv中。使用\r(Mac)行结束符导出到.csv。然后使用TR & mac2unix到新行映射到您的保留字符和修复行终止:

tr '\n' '~' < Kontakte.csv | mac2unix > New.csv 

当您完成改写(munging)的文件,tr '~' '\n'将恢复事宜。

当然,使用适当的工具比如CSV库会更好。