c語言在文件中查找
1. c語言 如何查詢文件數據
先用getline或fgets讀取數據到一個字元串中,這個串定義的長一點,保證夠用就行,如:
char
str[1024];
fgets(
str
,
sizeof(str),
fp
);
//fp為你打開的文件指針
然後調用for循環去讀取串的的數據,假設你的分隔符是空格,遍歷str,遇到空格就得到一個數據,然後繼續遍歷,直到str尾。
然後再去fgets數據,再遍歷,即可得到所有的數據。
2. C語言文件中字元串的查找與替換
用"rb" open, 用 fread 讀, 用 fwrite 寫.
記錄地點 用 fgetpos.
下面程序例子是按你的原來題意,找目標字串,輸出用替代字.直接用文件操作,不開單元存放文件.
輸入文件 a.txt 輸出文件 tmp.txt
至於你的新要求,給你提示記錄地點的方法.你可以rewind(fin),從頭一個字一個字讀,讀一個輸出一個,讀到的位置等於POS[i]-80時,讀80個字但不輸出,這就去掉了80個字.
例如找到的POS[]共NN個。
#define buff_size 1024
long int n,n1,n2,i,j,k;
char *buff;
buff=(char*) malloc(buff_size * sizeof(char));
rewind(fin);
for(k=0;k<NN;k++){
if (k==0) {n=POS[k]-80;} else {n=POS[k]-POS[k-1]-80;};
n1 = n / buff_size; n2 = n % buff_size;
if (n1 >0) for (i=0;i<n1;i++){
fread(buff,sizeof(char),buff_size,fin);
fwrite(buff,sizeof(char),buff_size,fout);
};
if (n2 > 0) {fread(buff,sizeof(char),n2,fin);
fwrite(buff,sizeof(char),n2,fout);
};
fread(buff,sizeof(char),80,fin);
for (i=0;i<80;i++) buff[i]='0'; buff[80]='\0';
fwrite(buff,sizeof(char),80,fout);
} ; end for k
這里請自己寫 讀最後一段,無需改零,讀一個字,輸出一個字,直到EOF.
-----------------
#include <stdio.h>
#include <stdlib.h>
void main (int argc, char *argv[])
{
FILE *fin,*fout;
char namein[72]="a.txt";
char nameout[72]="tmp.txt";
char target[120],tidai[120];
char work[120];
int L1,L2,i,k=0;
int numread;
fpos_t pos;
fpos_t POS[100];
printf("Enter target string: ");
scanf("%s",&target[0]);
L1 = strlen(target);
printf("Enter replace string: ");
scanf("%s",&tidai[0]);
L2 = strlen(tidai);
if ( (fin = fopen(namein,"rb") ) == NULL ) {
printf("\007Cann't open input file: %s ", namein);exit(1);
};
if ( (fout = fopen(nameout,"wb") ) == NULL ) {
printf("\007Cann't open temp work file: %s ", nameout);exit(1);
};
Lab1:
numread = fread( work, sizeof( char ), L1, fin );
if (numread < L1) {
// fwrite( work, sizeof( char ), numread, fout );
goto done;
};
if ( strncmp(work,target,L1) == 0 ){
// fwrite( tidai, sizeof( char ), L2, fout );
if( fgetpos( fin, &pos ) != 0 ) perror( "fgetpos error" );
else { POS[k] = pos-L1; k=k+1;};
goto Lab1;
};
Lab2:
// fwrite( &work[0], sizeof( char ), 1, fout );
for (i=0;i<L1-1;i++) work[i]=work[i+1];
fread( &work[L1-1], sizeof( char ), 1, fin );
if (feof(fin)) {
// fwrite( &work[1], sizeof( char ), L1-1, fout );
goto done;
};
if ( strncmp(work,target,L1) == 0 ){
// fwrite( tidai, sizeof( char ), L2, fout );
if( fgetpos( fin, &pos ) != 0 ) perror( "fgetpos error" );
else { POS[k] = pos-L1; k=k+1;};
goto Lab1;
} else {goto Lab2;};
// 新述 rewind(fin); 那部分程序語句插在這里,聲明放前面
done: fclose(fin);fclose(fout);
printf("output in %s\n",nameout);
for (i=0;i<k;i++){
printf("%ld \n",(long int) POS[i]);
}
exit(0);
}
3. C語言中如何在文件內查找關鍵字並替換
示例代碼:
#include
struct
data
{
char
data_1;
int
data_2;
};
int
main(int
argc,
char
*argv[])
{
int
i,
j,
n
=
0;
struct
data
d3[]
=
{
{'a',
1},
{'b',
2},
{'a',
3}
};
struct
data
one_class[3]
=
{0};
for(i
=
0,
j
=
0;
i
<
3;
i++)
if
(d3[i].data_1
==
'a')
one_class[j++]
=
d3[i];
n
=
j;
for(j
=
0;
j
<
n;
j++)
printf("%p
",
&one_class[j]);
printf("\n");
return
0;
}
假設要在一個結構體數組d3中尋找滿足data結構體中成員data_1等於字元a的所有結構體並將其存入one_class數組中,並且最後列印出符合要求結構體的地址,不知道你的問題是不是類似這樣的情況?
4. C語言:在當前目錄下的文件中查找記錄並輸出到屏幕,咋編
代碼文本:
#include "stdio.h"
#include <string.h>
struct STU{
char nm[21],id[12];
int s[5];
};
int main(int argc,char *argv[]){
struct STU stu;
char ts[21];
FILE *fp;
if(fp=fopen("stu.dat","r")){
printf("Please enter a name or ID... ");
scanf("%20s",ts);
printf(" To find the result is: ");
while(fscanf(fp,"%s%s%d%d%d%d%d",stu.nm,stu.id,stu.s,stu.s+1,stu.s+2,stu.s+3,stu.s+4)!=EOF)
if(strcmp(ts,stu.nm)==0 || strcmp(ts,stu.id)==0){
printf(" %s %s%4d%4d%4d%4d%4d ",stu.nm,stu.id,stu.s[0],stu.s[1],stu.s[2],stu.s[3],stu.s[4]);
fclose(fp);
return 0;
}
printf("Not find... ");
fclose(fp);
}
else
printf("Open the file failure, exit... ");
return 0;
}
5. 在c語言中讀寫文件如何查找特定名稱的文件
打開文件,遍歷文件內容然後一個一個匹配查找就好了。
下面是一段示例代碼:
#include<stdio.h>
#include<string.h>
#include<dir.h>
#define
SIZE
12
void
find
_creat
_file(char
*);
int
main(void)
{
char
filename[SIZE];
strcpy(filename,"filename");
find_creat_file(filename);
getch();
return
0;
}
void
find_creat_file(char
*filename)
{
struct
ffblk
ffblk;
int
done;
done=
findfirst
("d:\\filename",&ffblk,0);
if(done==0)
return
0;
else
mkdir("d:\\filename");
}
6. c語言命令行在一個文件中查找另一個文件指定的內容
你試一下不就知道了。
7. c語言編程~~!!實現txt文件中的查找與替換功能。
剛好昨天有人問了,不過他得分是100、、、你們是不是一個學校的,作業都一樣
你拿去試試,不行再說
不懂hi我
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
void
file_replace(FILE
*fp_in,FILE
*fp_out,char
*src,char
*dst)
{
char
c=fgetc(fp_in);
char
tmp[100];
int
count=0;
while(c!=EOF)
{
int
pPos=0;
if(c!=src[pPos])
{
fputc(c,fp_out);
c=fgetc(fp_in);
continue;//如果當前字元不相等,繼續下一個字元
}
memset(tmp,0,100);
while(c==src[pPos])
{
tmp[pPos]=c;
c=fgetc(fp_in);
pPos++;//相等的部分跳過
}
if(src[pPos]=='\0')
{
count++;
printf("源串已找到!替換%d處\n",count);
fputs(dst,fp_out);
continue;
}
else
{
fputs(tmp,fp_out);
continue;//如果當前字元不相等,繼續下一個字元
}
}
return;
}
void
main()
{
char
path[100],old_path[100];
printf("請輸入文件路徑:\n");
gets(path);
strcpy(old_path,path);
FILE
*fp_in;
FILE
*fp_out;
fp_in=fopen(path,"rt");
fp_out=fopen(strcat(path,".bak"),"wt");
if(!fp_in||!fp_out)
{
printf("File
open
error!");
return;
}
char
src[100],dst[100];
printf("請輸入要替換的源串:\n");
gets(src);
printf("請輸入要替換的目的串:\n");
gets(dst);
file_replace(fp_in,fp_out,src,dst);
fclose(fp_in);
fclose(fp_out);
char
cmd[200]="
";
strcat(cmd,path);
strcat(cmd,"
");
strcat(cmd,old_path);
system(cmd);
memset(cmd,0,200);
strcat(cmd,"del
");
strcat(cmd,path);
system(cmd);
}
8. c語言從文件中查找字元串
c語言從文件中查找字元串的方法。
如下參考:
1.打開python命令窗口,定義並分配字元串變數s1。
9. C語言如何從文件中查找指定的字元,然後替換它
這個很簡單呢,你只要去循環比對
/*檢查data字元串,是否samplestr的一個子串,samplestr的各個字串以|分隔*/
int
CheckStrIn(char
*data,char
*samplstr)
{
int
i,ilen,icount;
char
*sp;
sp=samplstr;
ilen=strlen(samplstr);
for(i=0,icount=1;i<ilen;i++,sp++)
{
if(*sp=='|')
icount++;
}
ilen=strlen(data);
for(i=0;i<icount;i++)
{
if(memcmp(data,searchsplit(samplstr,i),ilen)==0)
return
1;
}
return
0;
}
如果是則替換掉