我想將CSV行分割爲單獨的字段,但是在某些字段中有逗號或換行符。
如果我使用line.split(',')
,它會在引號內選擇逗號,如果我使用CSV類,則會因爲新行而給我一個非法的格式錯誤。使用Ruby分割CSV文件,同時忽略逗號和引號內的字符
0
A
回答
8
我確信自我實現是重新發明車輪。如果stdlib的CSV類不符合您的要求,請嘗試另一個實現FasterCSV。
確保您的輸入格式是否正確:只在引號內用新行和逗號和轉義引號。
更新:根據Generating fields containing newline with Ruby CSV::Writer stdlib的CSV在包含換行符的字段中存在問題。我想它首先使用換行符作爲分隔符來盲目地分割行,並且不考慮任何轉義。
2
您需要知道輸入csv文件的格式,它需要有效。 如果逗號不是字段分隔符,則必須指定哪個字符是分隔符。
處理CSV文件的可能看起來像:
CSV.foreach(fname_in, {:col_sep => ';', :quote_char => '"',
:headers => true,
:encoding => Encoding::UTF_8}) do
|row|
...
# do some stuff with the row
...
end
正如你可以看到,有更多的選擇如何描述輸入格式。請參閱csv模塊的CSV class的Ruby文檔。
1
FasterCSV有一個方便的parse_line()方法,可以在創建數組時很好地複製.split(',')的功能,同時尊重雙引號字符串中的逗號規則。
require 'csv'
CSV.parse_line(line)
例...
require 'csv'
line='"PBN, Inc.",100,10'
puts(line.chomp.split(','))
"PBN
Inc."
100
10
puts(CSV.parse_line(line))
PBN, Inc.
100
10
相關問題
- 1. 用逗號分割字符串,但忽略雙引號內的逗號?
- 2. 分割字符串用逗號而忽略括號或引號逗號
- 3. 的Javascript:用逗號分割的字符串,但忽略引號逗號
- 4. python csv模塊讀取csv按逗號分割,但忽略雙引號或單引號內的逗號
- 5. 分割CSV文件,但忽略逗號內報價
- 6. 解析csv文件,忽略引號中逗號的逗號c#
- 7. CSV忽略逗號雙引號
- 8. 分割字符串,引號內忽略分隔符(蟒蛇)
- 9. 字符串標記:分割字符串用逗號,而忽略逗號雙引號
- 10. 字符串分割排除逗號在雙引號和分割相鄰逗號
- 11. 如果逗號(,)在引號中,最好忽略CSV文件中的逗號(,)?
- 12. 使用awk忽略CSV文件字段中的逗號
- 13. 從csv忽略一行內的逗號
- 14. 用逗號分割線,但在引號內不用逗號?
- 15. JavaScript:分割逗號分隔的字符串,但忽略花括號
- 16. 解析一個CSV字符串,同時忽略單個列內的逗號
- 17. 用內聯逗號分隔逗號分隔的csv文件
- 18. 如何以逗號分割字符串但忽略\ ,?
- 19. 以逗號分割,忽略特殊字符
- 20. C++用逗號和字符串CSV線雙引號內
- 21. C++使用逗號分隔CSV引號
- 22. 使用python分隔帶分隔符的字符串,而忽略引號內的分隔符和轉義引號
- 23. 拆分字符串使用逗號,但忽略逗號,如果它是括號或引號
- 24. 逗號分隔csv中的雙引號內的逗號,
- 25. Java正則表達式用逗號分隔,但忽略逗號內的逗號
- 26. 使用linux命令清理CSV文件,同時忽略引號之間的逗號
- 27. 包含逗號與逗號分隔符的分割字符串
- 28. 拆分逗號分隔的字符串,但忽略逗號整個字
- 29. Python從CSV文件中抓取整個列,忽略逗號用雙引號
- 30. 在一個字符串忽略逗號之間用逗號
我意識到我是用舊的CSV庫,因爲我使用的紅寶石1.8.7。更改爲使用紅寶石1.9.2其中FasterCSV現在是標準的CSV庫,它工作正常。 – link664