2017-08-10 33 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庫會更好。