【发布时间】: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 提出以下建议:
- 通过遍历数组 (l) 并将每一行添加到一个大字符串中,将整个文本放入一个字符串中。
-
使用
split方法和关键字“FEDERALIST No.”拆分字符串。这将创建一个数组,其中每个元素都是文本的一部分:arrayName = bigString.split("FEDERALIST No.") 然后,您可以使用您在程序中使用的类似方法循环遍历这个新数组,为每个元素创建文件。
尽管听起来很简单,但我很难将这些代码放在一起。
【问题讨论】:
-
输入的是
l吗?它是如何初始化的? -
输入是算法之前列出的联邦党人论文的数组。