我在一个文本文件中有一个巨大的HPBasic代码字符串,例如:
158! 159 SUBEXIT 160! 161 Prntr_available:!如果打印机不是162,则不允许进入测试菜单!可用结果仅送到打印机163 IF条件$(15,2)[6,6] <>“ *”然后!打印机不可用164 Cond_error = 1 165 Prompt_user(“错误:打印机不可用;无法执行测试。”)
那些连续的数字是代码中的新行。如何在每个数字之前对此进行迭代以打印换行符以使其可读?现在我有:
mystring = ('EnormousString')
myString.replace('1', '1\n')
这种作品。有没有办法为此添加+=1
?不知道该去哪里。
答案 0 :(得分:0)
您可以执行以下操作:
output = []
curline = 0
for token in s.split(' '):
try:
line = int(token)
if line > curline:
curline = line
output.append('\n')
except:
pass
output.append(token)
output_str = ' '.join(output).lstrip() # lstrip removes the leading \n
这不是假定行号都比最后一行大一(但可以添加),因为我相信BASIC只要求它比前一行大。正如其他人提到的那样,如果一行中有更大的数字(用空格包围),则可能会中断。
答案 1 :(得分:0)
此def将执行此操作(如下)。它要求所有连续的行分隔数字都按顺序出现,并且我要求每个数字之间都必须有空格,以减少由于(例如)出现在文本前的数字3而导致丢失信息的可能性。第3行分隔符。为了防止行分割“ 3”(由于某种原因在第3行分隔符之后发生),我使用了maxsplit = 1(即str.split([sep[, maxsplit]])
),因此它仅使用了“ 3”的第一个实例:
def split_text(text):
i, sep, tail = 1, '1 ', text
while sep in tail:
head, tail = tail.split(sep, 1)
print(head)
i += 1
sep = ' ' + str(i) + ' '
print(tail)
将其添加到文件应该很简单。
答案 2 :(得分:0)
这假定文本的第一部分将始终是行号,如果输入有效,则应使用该行号。它还假定行本身将永远不会包含两个空格之间的下一个行号。这不是一个很好的假设,但是如果不以某种方式集成HPBasic解析器,我认为没有很多解决方法。
code = """158 ! 159 SUBEXIT 160 ! 161 Prntr_available: ! Cannot allow entry to Test Menu if printer is not 162 ! available; results only go to printer 163 IF Conditions$(15,2)[6,6]<>"*" THEN ! Printer is not available 164 Cond_error=1 165 Prompt_user("ERROR: Printer not available; cannot perform tests.")"""
line_number = int(code[:code.index(" ")])
lines = []
string_index = 0
while True:
line_number += 1
try:
next_index = code.index(" " + str(line_number) + " ", string_index)
except ValueError:
lines.append(code[string_index:].strip())
break
lines.append(code[string_index:next_index].strip())
string_index = next_index
print "\n".join(lines)
# 158 !
# 159 SUBEXIT
# 160 !
# 161 Prntr_available: ! Cannot allow entry to Test Menu if printer is not
# 162 ! available; results only go to printer
# 163 IF Conditions$(15,2)[6,6]<>"*" THEN ! Printer is not available
# 164 Cond_error=1
# 165 Prompt_user("ERROR: Printer not available; cannot perform tests.")
答案 3 :(得分:0)
只要找到3位数字,用正则表达式替换怎么样?
import re
mystring = '158 ! 159 SUBEXIT 160 ! 161 Prntr_available: ! Cannot allow entry to Test Menu if printer is not 162 ! available; results only go to printer 163 IF Conditions$(15,2)[6,6]<>"*" THEN ! Printer is not available 164 Cond_error=1 165 Prompt_user("ERROR: Printer not available; cannot perform tests.")'
print((re.sub(r"(\d{3})",r"\n\1", mystring)))
这将给出以下输出:
158 !
159 SUBEXIT
160 !
161 Prntr_available: ! Cannot allow entry to Test Menu if printer is not
162 ! available; results only go to printer
163 IF Conditions$(15,2)[6,6]<>"*" THEN ! Printer is not available
164 Cond_error=1
165 Prompt_user("ERROR: Printer not available; cannot perform tests.")