user-0 提问: C语言如何定位并抓取文件中的特定字符串

回复:
user: user-1
content: 引用 3 楼 lonmecy 的回复:[quote=引用 2 楼 战在春秋的回复:]引用该如何抓取inname后的字符串呢？ 读第一个文件的代码如下：(测试通过) #include<stdio.h> #include<stdlib.h> #include <string.h>  int main() { 	FILE *file; 	char line[64]; //接收文件每行 	char result[32][64]; //二维数组，存放结果字符串 	int i = 0; 		 	file = fopen("d:\\test.txt", "r"); 	if (file == NULL) 		exit(EXIT_FAILURE);  	while (fgets(line, sizeof(line), file)) {  //用fgets函数逐行读取到line 		char *pLast = strrchr(line, '=');  //用strrchr查找'='字符最后出现的位置, 		if (NULL != pLast)        		{ 			strcpy(result[i], pLast + 1);  //将每行最后一个"="之后的字符赋给result 		} 		i++;  //以题目第一个文件为例子，最后i值为4。result[0]到result[4]即为所需要的结果 	} 	fclose(file); 	exit(EXIT_SUCCESS); } 说明： 1 题目中有C语言这几个字，我理解就只能用C的东西，不考虑C++的函数。 2 第二个文件的处理方法类似，查找'='字符或者空格字符出现的位置，再进行处理。 十分感谢！这个二位数组是不是一个存放字符串的一维数组？[/quote] 一个二位数组，char resutl[32][64] ,代表这个二维数组能存放32条信息，每条信息不超过64个字节

user: user-2

user: user-3
content: 仅供参考：//NAME: essaie bla bla //DIMENSION: 8 //DATA //1  14  15 //2  11  10 //3  6   4 //4  7   13 //5  9   21 //6  19  3 //7  1   5 //8  8   8 //EOF // // 文本文件中可能还含有其他内容，但是需要用到的内容即以上  //比如data.txt: //NAME: essaie bla bla //其它内容 //DIMENSION: 8 //其它内容 //DATA //其它内容 //1  14  15 //其它内容 //2  11  10 //其它内容 //3  6   4 //其它内容 //4  7   13 //其它内容 //5  9   21 //其它内容 //6  19  3 //其它内容 //7  1   5 //其它内容 //8  8   8 //其它内容 //EOF  // 目标是要获取NAME后字串，DIMENSION后数值，以及DATA以下的数值 // 其中NAME就是随便个字句，DIMENSION是城市数量，DATA以下是城市编号，X坐标，Y坐标 // 所有的这些将赋值给一个事先定义好的结构 #include <stdio.h> #include <string.h> #define MAXCPL   80   //每行最大字符数 #define MAXCITY  100  //每组数据中DATA最多项数，DIMENSION的最大值 #define MAXNAMEL 32   //NAME最大长度 struct S {     char NAME[MAXNAMEL+1];     int  DIMENSION;     struct D {         int NO;         int X;         int Y;     } DATA[MAXCITY]; } s; FILE *f; int st,n,i; char ln[MAXCPL]; int main() {     f=fopen("data.txt","r");     if (NULL==f) {         printf("Can not open file data.txt!\n");         return 1;     }     st=0;     n=0;     while (1) {         if (NULL==fgets(ln,MAXCPL,f)) break;         if (st==0) {             if (1==sscanf(ln,"NAME: %31[^\n]",s.NAME)) st=1;         } else if (st==1) {             if (1==sscanf(ln,"DIMENSION: %d",&s.DIMENSION)) st=2;         } else if (st==2) {             if (0==strcmp(ln,"DATA\n")) st=3;         } else if (st==3) {             if (3==sscanf(ln,"%d%d%d",&s.DATA[n].NO,&s.DATA[n].X,&s.DATA[n].Y)) {                 n++;                 if (n>=MAXCITY || n>=s.DIMENSION) break;             }         }     }     fclose(f);     printf("s.NAME=[%s]\n",s.NAME);     printf("s.DIMENSION=%d\n",s.DIMENSION);     for (i=0;i<n;i++) {         printf("s.DATA[%d].NO,X,Y=%d,%d,%d\n",i,s.DATA[i].NO,s.DATA[i].X,s.DATA[i].Y);     }     return 0; } //s.NAME=[essaie bla bla] //s.DIMENSION=8 //s.DATA[0].NO,X,Y=1,14,15 //s.DATA[1].NO,X,Y=2,11,10 //s.DATA[2].NO,X,Y=3,6,4 //s.DATA[3].NO,X,Y=4,7,13 //s.DATA[4].NO,X,Y=5,9,21 //s.DATA[5].NO,X,Y=6,19,3 //s.DATA[6].NO,X,Y=7,1,5 //s.DATA[7].NO,X,Y=8,8,8

user: user-4
content: 比如： char str[n][m]; 二维数组str由n个一维数组组成，每个一维数组可存放一个字符串(长度不超过m)。

user: user-4
content: 引用这个二位数组是不是一个存放字符串的一维数组 是的，二维字符数组的每一行就是一个字符串。

user: user-5
content: 这个基础，参考楼上

user: user-0
content: 引用 2 楼 战在春秋的回复:引用该如何抓取inname后的字符串呢？ 读第一个文件的代码如下：(测试通过) #include<stdio.h> #include<stdlib.h> #include <string.h>  int main() { 	FILE *file; 	char line[64]; //接收文件每行 	char result[32][64]; //二维数组，存放结果字符串 	int i = 0; 		 	file = fopen("d:\\test.txt", "r"); 	if (file == NULL) 		exit(EXIT_FAILURE);  	while (fgets(line, sizeof(line), file)) {  //用fgets函数逐行读取到line 		char *pLast = strrchr(line, '=');  //用strrchr查找'='字符最后出现的位置, 		if (NULL != pLast)        		{ 			strcpy(result[i], pLast + 1);  //将每行最后一个"="之后的字符赋给result 		} 		i++;  //以题目第一个文件为例子，最后i值为4。result[0]到result[4]即为所需要的结果 	} 	fclose(file); 	exit(EXIT_SUCCESS); } 说明： 1 题目中有C语言这几个字，我理解就只能用C的东西，不考虑C++的函数。 2 第二个文件的处理方法类似，查找'='字符或者空格字符出现的位置，再进行处理。 十分感谢！这个二位数组是不是一个存放字符串的一维数组？

user: user-4
content: 引用该如何抓取inname后的字符串呢？ 读第一个文件的代码如下：(测试通过) #include<stdio.h> #include<stdlib.h> #include <string.h>  int main() { 	FILE *file; 	char line[64]; //接收文件每行 	char result[32][64]; //二维数组，存放结果字符串 	int i = 0; 		 	file = fopen("d:\\test.txt", "r"); 	if (file == NULL) 		exit(EXIT_FAILURE);  	while (fgets(line, sizeof(line), file)) {  //用fgets函数逐行读取到line 		char *pLast = strrchr(line, '=');  //用strrchr查找'='字符最后出现的位置, 		if (NULL != pLast)        		{ 			strcpy(result[i], pLast + 1);  //将每行最后一个"="之后的字符赋给result 		} 		i++;  //以题目第一个文件为例子，最后i值为4。result[0]到result[4]即为所需要的结果 	} 	fclose(file); 	exit(EXIT_SUCCESS); } 说明： 1 题目中有C语言这几个字，我理解就只能用C的东西，不考虑C++的函数。 2 第二个文件的处理方法类似，查找'='字符或者空格字符出现的位置，再进行处理。

user: user-6
content: 1： scanf 正则表达式 fscanf正则表达式  2： getline获取流中的一行字符串 strstr  查找特定字符串