【问题标题】:Ruby String/Array Write programRuby 字符串/数组写入程序
【发布时间】:2013-11-29 02:59:45
【问题描述】:

对于我正在为学校开展的一个项目,该项目的一个部分要求我们收集所有联邦党人论文并通过一个程序运行它,该程序基本上分割文本并写入新文件(每不同的联邦党人论文)。

我决定采用的逻辑是进行搜索,每次搜索都是“联邦党人编号”。它会将所有内容保存到一个新文件中,直到下一个“Federalist No”。 这是我到目前为止的算法:

file_name = "Federalist" 
section_number = "1"

new_text = File.open(file_name + section_number, 'w')
i = 0 
n= 1
while i < l.length 
  if (l[i]!= "federalist") and (l[i+1]!= "No")
    new_text.puts l[i]
    i = i + i
  else 
    new_text.close
    section_number = (section_number.to_i +1).to_s
    new_text = File.open(file_name + section_number, "w")
    new_text.puts(l[i])
    new_text.puts(l[i+1])
    i=i+2
  end
end

在尽可能多地调试代码之后(我是 Ruby 的初学者),我现在遇到的问题是因为 while 函数始终成立,它永远不会继续执行 else 命令。

关于以不同的方式解决这个问题,我的 TA 提出以下建议:

  1. 通过遍历数组 (l) 并将每一行添加到一个大字符串中,将整个文本放入一个字符串中。
  2. 使用split 方法和关键字“FEDERALIST No.”拆分字符串。这将创建一个数组,其中每个元素都是文本的一部分:

    arrayName = bigString.split("FEDERALIST No.")
    
  3. 然后,您可以使用您在程序中使用的类似方法循环遍历这个新数组,为每个元素创建文件。

尽管听起来很简单,但我很难将这些代码放在一起。

【问题讨论】:

  • 输入的是l吗?它是如何初始化的?
  • 输入是算法之前列出的联邦党人论文的数组。

标签: ruby arrays string


【解决方案1】:

i = i + i

i 从 0 开始,然后将 0 添加到其中,得到 0,无论该值是/意味着什么,它总是小于 l

由于这是一项学校作业,因此我不愿直接回答您。这真的不是 SO 的用途,我很高兴您也没有征求完整的解决方案。

因此,我将指导您使用 Ruby 中的一些有用方法,这些方法可能会有所帮助。

在数组中:.join.each.map
在字符串中:.split

仅供参考,你的助教的建议比你决定开始的算法要简单得多......虽然从技术上讲,它并没有错。只是更复杂。

【讨论】:

  • 到目前为止,我已将 i = i + i 更正为 i = i + 1,这导致创建了第一个文件“Federalist No. 1”但我仍然对为什么程序无法运行感到困惑去其他地方。
  • 哦,那是我的错。 "l" 在 Federalist 论文之前定义为 l = Array.new 该数组由所有 Federalist 论文组成。
  • 我很好奇数组l 是否只包含一个字符串元素,而所有文件都在那个粗字符串中。换句话说,您有多确定l.length 实际上大于1?你的助教关于实现.split 的评论让我提出这个问题,因为你的代码也没有在论文数组上完成.split
  • 如果我正确理解了这个问题,我相当肯定 l.length 大于 1。数组的格式如下:l = Array.new l[0]=" " l[1]=" " l[2]=" " l[3]=" " l[4]="FEDERALIST. No. 1" l[5]=" " l[6]="General Introduction" ...etc
  • 另外,我的代码没有实现split,因为我从未将数组转换为字符串。
猜你喜欢
  • 1970-01-01
  • 2020-09-27
  • 1970-01-01
  • 2010-10-17
  • 2014-12-11
  • 1970-01-01
  • 2011-11-07
  • 2013-05-25
  • 1970-01-01
相关资源
最近更新 更多