簡體   English   中英

Ruby CSV::Row 刪除新行

[英]Ruby CSV::Row remove new line

我正在打開一個 CSV 文件,然后將其轉換為 JSON。 除了 JSON 數據在字符串中包含\\n字符外,這一切正常。 這些不是最后一個元素的一部分,據我所知,打印它並嘗試對其進行咀嚼。 當我打印該row它確實有\\n

require 'csv'
require 'json'
def csv_to_json (tmpfile)
    JSON_ARRAY = Array.new
    CSV.foreach(tmpfile) do |row|
        print row[row.length - 1]
        if row[row.length - 1].chomp! == nil
            print row
        end
        JSON_ARRAY.push(row)
     end
     return JSON_ARRAY.to_json
 end

JSON 在返回時看起來像這樣

["field11,field12\n",
 "field21,field22\n"]

如何刪除這些新行字符?

編輯:這些是CSV::Row對象,不支持字符串操作,如chompstrip

tmpfile的格式為

field11,field21
field21,field22

row_sep設置為nil

JSON_ARRAY.push( row.to_s( row_sep: nil ) )

或者

JSON_ARRAY.push( row.to_csv( row_sep: nil ) )

正如評論指出的那樣, CSV::row#to_sCSV::row#to_csv的別名,它自動在每行后面添加一個行分隔符。 要解決此問題,您只需將row_sep設置為nil ,它就不會在每行的末尾添加\\n

希望有幫助。

最簡單的方法:

File.read(tmpfile).split("\n")

順便說一下,如果你想從字符串中刪除換行符,你可以使用String::strip方法。

CSV.foreach(tmpfile) do |row|
  # here row should be an array.
  p row
end
CSV.foreach(tmpfile) do |row|
    print row[row.length - 1]
    if row[row.length - 1].chomp! == nil
        print row
    end
    row.map{|cell| cell.strip!}
    JSON_ARRAY.push(row)
 end

該行不支持剝離,但單元格支持。

我能夠使用map!讓它工作map! 事后

json_array.map! { |row| row = row.to_s.chomp! }

你也可以做to_s.chomp! 循環內部。 這對我來說不是一個選擇,因為我需要常規對象在返回 json 之前進行一些計算

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM