我有一组要打开的文件并搜索字符串。我的代码适用于单个文件。 由于我想在每个文件中搜索不同的字符串,因此更加困难。例如:
#include <stdio.h>
#include <stdlib.h>
int findLength(char array[]) {
int i = 0;
for (i = 0; array[i] != '\0'; i++) {
}
return i;
}
char* arrayToString(char **string, size_t size) {
int bigSize = 0, len;
int i = 0, j, k;
for (j = 0; j < size; j++) {
bigSize += findLength(string[j]);
}
char *bigstring = (char *)malloc(bigSize + 1);
for (j = 0; j < size; j++) {
len = findLength(string[j]);
for (k = 0; k < len; k++) {
bigstring[i++] = string[j][k];
}
}
bigstring[i] = '\0';
return bigstring;
}
int main(int argc, const char * argv[])
{
char *color[] = { "red", "blue", "red" };
char *bigstring = arrayToString(color, 3);
printf("%s\n", bigstring);
free(bigstring);
return 0;
}
我的问题是,编写一个完整的新脚本是否更容易执行此操作,还是值得修改现有脚本以合并此功能?
**File | String**
one.txt | ra
two.txt | nd
three.txt | om
four.txt | st
该脚本打开作为输入提供的文件,然后在其中搜索作为输入的字符串。然后它在到达作为输入的字符串时开始复制,并在到达单词&#34; interface&#34;时停止复制。它出现在所有文本文件中。然后将复制的部分写入另一个文件。
所需的输出将是每个文件名的列表,如果找到该字符串,则依赖于是或否。
import re
import io
prompt = ">> "
configfile = input(prompt)
interfaceno = input(prompt)
with open(configfile) as infile, open('output2.txt', 'w+') as outfile:
copy = False
for line in infile:
if line.startswith("interface " + interfaceno):
copy = True
elif line.startswith("interface"):
copy = False
elif copy:
outfile.write(line)
答案 0 :(得分:0)
保留现有代码,但启动新程序。 这个新文件会读取您发布的第一个文件,其中包含文件和字符串列。逐行读取该文件,将每行拆分为文件名和搜索字符串。将它们放入变量并打印出来。你将循环执行此操作。
现在,回到你的第一个程序。获取特定于文件的部分(在提示行下面)并将其作为刚刚编写的循环体。您可能需要调整几个变量名称,但这基本上就是程序:您已经有了处理一个文件的东西;只需将它放在循环中即可处理大量文件。