以下代码一次读取一个字符的文本文件并将其打印到stdout:
#include <stdio.h>
int main()
{
char file_to_open[] = "text_file.txt", ch;
FILE *file_ptr;
if((file_ptr = fopen(file_to_open, "r")) != NULL)
{
while((ch = fgetc(file_ptr)) != EOF)
{
putchar(ch);
}
}
else
{
printf("Could not open %s\n", file_to_open);
return 1;
}
return(0);
}
Run Code Online (Sandbox Code Playgroud)
但是不是打印到stdout [putchar(ch)]而是想在文件中搜索另一个文本文件中提供的特定字符串,即.strings.txt并输出匹配到out.txt的行
text_file.txt:
1993 - 1999 Pentium 1997 - 1999 Pentium II 1999 - 2003 Pentium III 1998 - 2009 Xeon 2006 - 2009 Intel Core 2
strings.txt:
Nehalem AMD Athlon Pentium
在这种情况下,三个第一text_file.txt行将匹配.我已经对C语言中的文件操作做了一些研究,似乎我可以使用fgetc[像我在我的代码中一样] 读取一个字符,一行fgets和一个块fread,但没有单词,因为我认为是完美的在我的情况?
我假设这是一个学习练习,你只是在寻找一个开始的地方.否则,你不应该重新发明轮子.
下面的代码应该让您了解所涉及的内容.它是一个程序,允许您指定要搜索的文件的名称以及在该文件中搜索的单个参数.您应该能够修改它以将短语设置为在字符串数组中搜索,并检查该数组中的任何单词是否出现在读取的任何行中.
您正在寻找的关键功能是strstr.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#ifdef DEBUG
#define INITIAL_ALLOC 2
#else
#define INITIAL_ALLOC 512
#endif
char *
read_line(FILE *fin) {
char *buffer;
char *tmp;
int read_chars = 0;
int bufsize = INITIAL_ALLOC;
char *line = malloc(bufsize);
if ( !line ) {
return NULL;
}
buffer = line;
while ( fgets(buffer, bufsize - read_chars, fin) ) {
read_chars = strlen(line);
if ( line[read_chars - 1] == '\n' ) {
line[read_chars - 1] = '\0';
return line;
}
else {
bufsize = 2 * bufsize;
tmp = realloc(line, bufsize);
if ( tmp ) {
line = tmp;
buffer = line + read_chars;
}
else {
free(line);
return NULL;
}
}
}
return NULL;
}
int
main(int argc, char *argv[]) {
FILE *fin;
char *line;
if ( argc != 3 ) {
return EXIT_FAILURE;
}
fin = fopen(argv[1], "r");
if ( fin ) {
while ( line = read_line(fin) ) {
if ( strstr(line, argv[2]) ){
fprintf(stdout, "%s\n", line);
}
free(line);
}
}
fclose(fin);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
样本输出:
E:\Temp> searcher.exe searcher.c char
char *
char *buffer;
char *tmp;
int read_chars = 0;
char *line = malloc(bufsize);
while ( fgets(buffer, bufsize - read_chars, fin) ) {
read_chars = strlen(line);
if ( line[read_chars - 1] == '\n' ) {
line[read_chars - 1] = '\0';
buffer = line + read_chars;
main(int argc, char *argv[]) {
char *line;
| 归档时间: |
|
| 查看次数: |
61272 次 |
| 最近记录: |