【问题标题】:Read one column from csv and make new column with previous column data从 csv 读取一列并使用前一列数据创建新列
【发布时间】:2017-08-07 11:22:05
【问题描述】:

在源图像的“id”列中,“-”之前的第一个数字是目标图像中的章节编号,“-”之后是目标图像中的诗句。在诗歌中,我正在从“-”之后创建大量数据。我尝试了几行不明白我应该如何继续前进。

我需要从 csv 文件中读取这个 source column image 数据。

并且想做这种格式target column image

chapter = []
verse = []
CSV.foreach('test_file.csv') do |row|   
 if (row[3] != "id" && row[3] != nil)
    chapter << row[3].partition("-").first
    verse << row[3].partition("-").last
 end
end

【问题讨论】:

  • 为什么是“01 09-12”?不应该是“01 09-11”和“01 12-99”吗?
  • 从源图像列“id”的第一个数字是章节,第二个是块,例如:01-01 在第一行,01-04 是第二列。然后两行中的第一个 01 是将存储在单独列中的章节。第一行的第二个 01 和第二行的第二个 04 将存储为比第一个小一个的块,例如 01-03 在单独的列中。

标签: ruby string csv


【解决方案1】:

我已经在下面写了答案。

我正在读取具有相同内容的 csv 文件。

chapter = []
verse = []
temp = []
pos = 0

CSV.foreach("test_file.csv") do |row|
    puts row
    if (row[1] != "id" && row[1] != nil)
        chapter << row[1].partition("-").first
        if(temp.size>0)
            no = row[1].partition("-").last
            verse_no = (no.to_i - 1)
            updated_verse = verse_no < 10 ? "0"+verse_no.to_s : verse_no.to_s
            verse.insert(pos, temp[pos]+ "-" + updated_verse)
            temp << no
            pos = pos + 1
        else
            temp << row[1].partition("-").last
        end
    end
end
puts verse
puts chapter

【讨论】:

    猜你喜欢
    • 2017-11-02
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多