PDA

View Full Version : سوال: جستجوی کلمه در فایل در زبان سی



shirinhekmat
شنبه 15 خرداد 1389, 11:06 صبح
سلام
من می خوام یک کلمه را در فایلی جستجو کنم اگه پیدا کرد از اون کلمه با متغیری تعداد تکرار آن کلمه در فایل را بشماره
اما نمیدانم در زبان C چطوری بنویسم . برام کمک کنید
فایلو باز می کنم یک حلقه while میذارم که مثلا به رشته tree رسید یک واحد به متغیر count اضافه کنه ولی جواب درست نمیده
چه کنم .میشه قطعه کد راهنمایی شو برام بگید:افسرده::ناراحت:

tdkhakpur
شنبه 15 خرداد 1389, 13:21 عصر
void main(void0
{
FILE *fp;
char str[32], , tmp[32], ch;
int count, c=0;
fp = fopen("data.txt", "rb+");
if( fp!=NULL)
{
cout<<"enter string to srearch in file : "<<"\n";
cin>>str;
count = 0;
while( !feof(fp) ){
fread(&tmp[c], 1, 1, fp);
if( c<strlen(str) ) C++‎;
else{
if( memcmp(str, tmp, c)==0 )
count ++;
memcpy(&tmp[0], &tmp[1], c);
}
}
fclose(fp);
}
cout<<"count of finded word is "<<count;
getch();
}

داخل کادر ارسال کد شد!

shirinhekmat
شنبه 15 خرداد 1389, 17:43 عصر
void main(void0
{
FILE *fp;
char str[32], , tmp[32], ch;
int count, c=0;
fp = fopen("data.txt", "rb+");
if( fp!=NULL)
{
cout<<"enter string to srearch in file : "<<"\n";
cin>>str;
count = 0;
while( !feof(fp) ){
fread(&tmp[c], 1, 1, fp);
if( c<strlen(str) ) C++‎‎;
else{
if( memcmp(str, tmp, c)==0 )
count ++;
memcpy(&tmp[0], &tmp[1], c);
}
}
fclose(fp);
}
cout<<"count of finded word is "<<count;
getch();
}

داخل کادر ارسال کد شد!
************************************************** ***
سلام ممنون از راهنمایی تان
قطعه کد شما به هر دو زبان سی و سی پلاس پلاس مخلوط بود من به زبان سی برگرداندم و حدود 7 ارور داشت که همه اش را رفع کردم جز یکی . این خط ارور را به همراه قطعه کد تغییریافته براتون میذارم. ممنون میشم دوباره راهنماییم کنید تا بلکه اجرا بشه وقتم کمه.
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
char str[32], tmp[32], ch;
int count=0, c=0;
fp = fopen("G:1.txt","r(rt)");
if( fp!=NULL)
{ //***
printf("enter string to srearch in file : ");
gets(ch);:گیج::اشتباه:
while( !feof(fp) ){
fread(&tmp[c], 1, 1, fp);
if( c<strlen(str) ) c++;
else{
if( memcmp(str, tmp, c)==0 )
count ++;
memcpy(&tmp[0], &tmp[1],c);
}
}
fclose(fp);
} //***
printf("count of finded word is ",count);
getch();
return 0;
جایی که با سایز بزرگ نوشتم خطای پایین را میده :
extra parameter call in to getch() in function main()
چکار کنم ؟؟؟؟؟؟؟ واقعا گیجم کرده ؟؟

sadegh-hut
شنبه 15 خرداد 1389, 18:04 عصر
اگه مشكلت همون قسمته ‏‏; اين درستشه:
بايد ch‏ رو رشته تعريف كني نه كاراكتر خالي.تازه امكان داره يه ارور ديگه هم بگيره اينم اينجاس:
printf("count of ...is‏ ‏:%d‏ ‏",count);

‎ ‎رو فراموش كرده بودي%d
در كل ميتوني كدتو يه جور ديگه بنويسي اگه خواستي بهت ميگم.

shirinhekmat
شنبه 15 خرداد 1389, 22:33 عصر
اگه مشكلت همون قسمته ‏‏; اين درستشه:
بايد ch‏ رو رشته تعريف كني نه كاراكتر خالي.تازه امكان داره يه ارور ديگه هم بگيره اينم اينجاس:
printf("count of ...is‏ ‏:%d‏ ‏",count);

‎ ‎رو فراموش كرده بودي%d
در كل ميتوني كدتو يه جور ديگه بنويسي اگه خواستي بهت ميگم.

سلام
میشه بگید چه جوری بنویسم ؟ اینطوری هم که گفتید امتحان کردم ، نشد ، خطا به قوت خودش باقیه ؟
من می خواهم رشته "vusiness" را در داخل فایل جستجو کنم و تعدادشو بهم بده
لطفا کمکم کنید.ممنون:لبخندساده:

tdkhakpur
شنبه 15 خرداد 1389, 23:20 عصر
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
char str[32], tmp[32], ch;
int count=0, c=0;
fp = fopen("G:\\1.txt","r(rt)"); // اینجا
if( fp!=NULL)
{
printf("enter string to srearch in file : ");
scanf("%s"str);// اینجا
while( !feof(fp) ){
fread(&tmp[c], 1, 1, fp);
if( c<strlen(str) ) C++‎;
else{
if( memcmp(str, tmp, c)==0 ){
count ++;
memcpy(&tmp[0], &tmp[1],c);
}
}
fclose(fp);
} //***
printf("\n count of finded word is ",count);
getch();
return 0;
}

sadegh-hut
شنبه 15 خرداد 1389, 23:55 عصر
خوب من مي گم از اين روش برو:
اول از همه ‏ char s‎[‎‎100]‎‎[‎‎20]‎‏
بعد تا فايل به انتها نرسيده با fscanf‏ و با‎ ‏s‏% از فايل بخون و بريز تو s‎‎‎[i‎]‎
خوب حالا موقع گرفتن رشته از كاربره.
كافيه رشته كاربر رو با ‏s‎[‎i]‎‏ مقايسه كني و به شمارشگر اضافه كني.
اگه وقت كردم كدشو واست مينويسم.

shirinhekmat
یک شنبه 16 خرداد 1389, 10:24 صبح
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
char str[32], tmp[32], ch;
int count=0, c=0;
fp = fopen("G:\\1.txt","r(rt)"); // اینجا
if( fp!=NULL)
{
printf("enter string to srearch in file : ");
scanf("%s"str);// اینجا
while( !feof(fp) ){
fread(&tmp[c], 1, 1, fp);
if( c<strlen(str) ) C++‎‎;
else{
if( memcmp(str, tmp, c)==0 ){
count ++;
memcpy(&tmp[0], &tmp[1],c);
}
}
fclose(fp);
} //***
printf("\n count of finded word is ",count);
getch();
return 0;
}


سلام
متشکرم از شما
ولی یکبار همین کد را توی کامپیوتر خود اجرا کنید می بینید خطایی قبلو که در بالا نوشتم میده
یکبار دیگه با تامل به خطوط کد نگاه کنید ، اصلا تو برنامه strlen تعریف نشده ولی در پایین استفاده کردین!!
چه کنم با این خطااااااااااااااااااااااا اااااااااااا؟؟؟؟؟؟؟؟؟؟؟؟؟ ؟؟؟؟؟؟:گیج:

tdkhakpur
یک شنبه 16 خرداد 1389, 13:18 عصر
یکبار دیگه با تامل به خطوط کد نگاه کنید ، اصلا تو برنامه strlen تعریف نشده ولی در پایین استفاده کردین!!

تامل واسه چی؟ تعریف include برای توابع که جزو کد نویسی نیست میتوانستید اضافه کنید.
احرش ما رو سر کامپایلر کشاندید


#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
FILE *fp;
char str[32], tmp[32], ch;
int count=0, c=0;
fp = fopen("unit1.cpp","rb+"); // ÇíäÌÇ
if( fp!=NULL)
{
printf("enter string to srearch in file : ");
scanf("%s", str);// ÇíäÌÇ
while( !feof(fp) ){
fread(&tmp[c], 1, 1, fp);
if( c<strlen(str) ) c++;
else{
if( memcmp(str, tmp, c)==0 )
count ++;
memcpy(&tmp[0], &tmp[1], c);
}
}
fclose(fp);
} //***
printf("\n count of finded word is (%d)",count);
getch();
return 0;
}

sadegh-hut
یک شنبه 16 خرداد 1389, 15:50 عصر
اگه مي خواي اين روش رو هم امتحان كن ( درست جواب ميده . )


#include<conio.h>
#include<dos.h>
#include<stdio.h>
#include<string.h>

void main(){
clrscr();
FILE * fp = fopen ( "1.txt " ,"r") ;
char string[10],s[20][10];
int i=0,count=0;
while ( !feof( fp ) ) {
fscanf(fp,"%s",s[i]);
i ++;
}
printf("Type your string for search : \n");
gets(string) ;
for(i=0 ; i <20 ; i ++)
if(strcmp(s[i],string) ==0){
count ++;
}
for(i=1;i<=count;i++){
printf("\a");
delay(100);
}
printf("Your string (\" %s \") find %d times in the file(1.txt)",string,count);
getch();
}
در ضمن به تعداد تكرار رشته مورد نظر براتون بوق ميزنه !!!!!!:لبخند::لبخند::چشمک:

shirinhekmat
یک شنبه 16 خرداد 1389, 22:49 عصر
اگه مي خواي اين روش رو هم امتحان كن ( درست جواب ميده . )


#include<conio.h>
#include<dos.h>
#include<stdio.h>
#include<string.h>

void main(){
clrscr();
FILE * fp = fopen ( "1.txt " ,"r") ;
char string[10],s[20][10];
int i=0,count=0;
while ( !feof( fp ) ) {
fscanf(fp,"%s",s[i]);
i ++;
}
printf("Type your string for search : \n");
gets(string) ;
for(i=0 ; i <20 ; i ++)
if(strcmp(s[i],string) ==0){
count ++;
}
for(i=1;i<=count;i++){
printf("\a");
delay(100);
}
printf("Your string (\" %s \") find %d times in the file(1.txt)",string,count);
getch();
}
در ضمن به تعداد تكرار رشته مورد نظر براتون بوق ميزنه !!!!!!:لبخند::لبخند::چشمک:
سلام
ممنون
برنامه شما توی زبان سی با کمی تغییر کار کرد بدون ارور تعدا لغات کل و متن و تعداد لغات مورد نظر را برام داد
حالا بدون خطا اجرا میشه ، چند کد بالا که دوستان مرحمت کرده بودند گذاشته بودند یک خطا یا دو خطا میداد که اصلا حل نمیشد . نمیدانم چرا!! اگه کد تغییریافته را خواستین میذارم .
:لبخند:

sadegh-hut
سه شنبه 18 خرداد 1389, 00:36 صبح
برنامه شما توی زبان سی با کمی تغییر کار کرد
:لبخند:
:اشتباه::اشتباه::اشتباه::نار حت::ناراحت:
خوب منم با C نوشته بودم كردم ديگه اما ارور نداشت كه ؟؟؟!!!
[RIGHT]من با turbo C++‎ v3.0 اجراش كردم.

نكنه تو با - -‍C اجراش كردي ؟؟؟!!!!!:لبخند::لبخند: