PDA

View Full Version : مبتدی: فایل {جستجوی ترتیبی}



Aliweb
یک شنبه 01 خرداد 1390, 19:06 عصر
سلام

کدزیر را مشاهده کنید :::

#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;
class Aliweb
{
public:
string name;
string famil;
int id;
};
int main()
{
Aliweb a[10];
for(int i=0;i<1;i++)
{
cout<<"Enter a id:";
cin>>a[i].id;
cout<<"Enter a name:";
cin>>a[i].name;
cout<<"Enter a famil:";
cin>>a[i].famil;
}
ofstream fout("C:\\Aliweb.txt");
for(int j=0;j<1;j++)
{
fout<<a[j].id<<"|";
fout<<a[j].name<<"|";
fout<<a[j].famil<<"|";
fout<<endl;
}
fout.close();

ifstream out("C:\\Aliweb.txt");
string res="";
char ch;
while(out)
{
ch=out.get();
res+=ch;
}
cout<<res;
out.close();

getch();
return 0;
}


حالا من میخوام یک جستجوی ترتیبی انجام بدم ابتدا یک کلید میگیرم کلید ما a.id هست و بعد یک ورودی میگیریم که چک کنه آیا این رکورد وجود دارد یا نه الان مشکل من همین خوندن فایل {فیلد a.id}هست و چک کردن البته چک کردن هم با یک if ساده ولی نمیدونم به چه شکلی استقاده کنم :

char ab;
cin>>ab;
if(a.id==ab)
{
cout<<"found";
}

tdkhakpur
سه شنبه 03 خرداد 1390, 11:12 صبح
جستجو داخل یک فایل متنی اون هم یا طراحی صورت بگیره و معلوم نباشه طول داده ها چقدره سرعت جستجو رو پایین میاره اما این کاری که قصد دارید انجام بدید باید به شکل زیر صورت بگیره


//---------------------------------------------------------------------------
#include <vcl.h>
#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;
class Aliweb
{
public:
string name;
string famil;
int id;
};
int main()
{
Aliweb a[10];
for(int i=0;i<1;i++)
{
cout<<"Enter a id:";
cin>>a[i].id;
cout<<"Enter a name:";
cin>>a[i].name;
cout<<"Enter a famil:";
cin>>a[i].famil;
}
ofstream fout("C:\\Aliweb.txt");
for(int j=0;j<1;j++)
{
fout<<a[j].id<<"|";
fout<<a[j].name<<"|";
fout<<a[j].famil<<"|";
fout<<endl;
}
fout.close();
ifstream out("C:\\Aliweb.txt");
string res="";
char ch;
while(out)
{
ch=out.get();
res+=ch;
}
cout<<res;
out.close();
ifstream in("C:\\Aliweb.txt");
int ab;
cin>>ab;
char tmpch;
bool FindOut=false;
while(!in.eof())
{
in>>a[0].id; in>>tmpch;
in>>a[0].name; in>>tmpch;
in>>a[0].famil; in>>tmpch;
if(a[0].id==ab){
FindOut = true;
break;
}
if( FindOut)
cout<<"found";
else
cout<<"not found";
in.close();
}
getch();
return 0;
}

Aliweb
سه شنبه 03 خرداد 1390, 12:38 عصر
ممنون

اون هدر vcl.h برای چی هست همون {Visual compomnent Libtary} ?


من از کامپایلر dev c++ استفاده میکنم جوابی نگرفتم{هدر vcl.h} پاک کردم در dev

یه کوچلو تغییر دادم:

//---------------------------------------------------------------------------2
#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;
class Aliweb
{
public:
string name;
string famil;
int id;
};
int main()
{
Aliweb a[10];
ifstream in("C:\\Aliweb.txt");
int ab;
cin>>ab;
char tmpch;
bool FindOut=false;
while(!in.eof())
{
in>>a[0].id; in>>tmpch;
in>>a[0].name; in>>tmpch;
in>>a[0].famil; in>>tmpch;
if(a[0].id==ab){
FindOut = true;
break;
}
if(FindOut)
cout<<"found";
else
cout<<"not found";
in.close();
}
getch();
return 0;
}

قبل از اجرای برنامه بالا فایل من داری فیلد های زیر هست::

12|aaaa|dddd|

بعد از اجرای برنامه عدد 12 را وارد میکنم جواب نمیگیرم

tdkhakpur
سه شنبه 03 خرداد 1390, 19:34 عصر
شرمنده اشتباه از ما بود


#include<iostream>
#include<conio.h>
#include<fstream>
using namespace std;
class Aliweb
{
public:
string name;
string famil;
int id;
};
void GetStr( char *text, char token, ifstream *in)
{
bool value=false;
int c=0;
text[c]=0;
while(!in->eof() && !value)
{
*in>>text[c];
if(text[c]==token){
value = true;
text[c] = 0;
}
c++;
}
}
int main()
{
Aliweb a[10];
for(int i=0;i<1;i++)
{
cout<<"Enter a id:";
cin>>a[i].id;
cout<<"Enter a name:";
cin>>a[i].name;
cout<<"Enter a famil:";
cin>>a[i].famil;
}
ofstream fout("C:\\Aliweb.txt");
for(int j=0;j<1;j++)
{
fout<<a[j].id<<"|";
fout<<a[j].name<<"|";
fout<<a[j].famil<<"|";
fout<<endl;
}
fout.close();
ifstream out("C:\\Aliweb.txt");
string res="";
char ch;
while(out)
{
ch=out.get();
res+=ch;
}
cout<<res;
out.close();
ifstream in("C:\\Aliweb.txt");
int ab;
cin>>ab;
char tmpch[10];
bool FindOut=false;
while(!in.eof())
{
GetStr(tmpch, '|', &in);
a[0].id = atoi(tmpch);
GetStr((char *)a[0].name.c_str(), '|', &in);
GetStr((char*)a[0].famil.c_str(), '|', &in);
if(a[0].id==ab){
FindOut = true;
break;
}
}
if( FindOut)
cout<<"found";
else
cout<<"not found";
in.close();
getch();
return 0;
}

tdkhakpur
چهارشنبه 04 خرداد 1390, 00:07 صبح
GetStr فایل رو که باز شده است رو میخونه و تا رسیدن به علامت | ادامه میده و با پیدا شدن این علامت میفهمه که اونجا اولین فیلد هست و اون رشته رو برگشت میده.

داخل کد هم چون شما سه دونه فیلد به اسم idو nameو famili دارید باید getstr رو سه بار صدا بزنید تا بتونه اون داده هایی که که قبلا داخل فایل نوشتید رو برگشت بدید.

اما داخل کد شما یک شرط هست که باید بصورت عددی بررسی بشه ولی چون چیزی که از فایل میخونید رشته هست به همین دلیل با atoi رشته رو به عدد تبدیل میکنید تا بعد از اون با ab مقایشه کنید تا از این طریق تشخیص بدید داده پیدا شده است یا نه برای تشخیص هم یک متغییر از نوع bool به اسم findout قرار داده شده تا از اون طریق عمل تشخیص رو انجام بدید.

ایرانشناسی
پنج شنبه 21 دی 1391, 17:37 عصر
حالا من یک سئوال این برنامه بخوام بگم هرچی 5 کاراکتر هست رو برام نشون بده چه کنم