PDA

View Full Version : سوال: مشکل با خواندن داده از فایل



root88
شنبه 17 مهر 1389, 13:26 عصر
با سلام
تو برنامه زیر از فایل یه متن خونده میشه و سعی میکنه که شناسه هاشو به صورت جدا تو یه فایل دیگه چاپ کنه( مثل تحلیل گر لغوی کامپایلر). مشکل اینجاست که موقع خوندن داده از فایا حداکثر تا 244 کاراکتر رو از فایل میخونه و اگه بیشتر از این باشه هیچی تو فایل مقصد نمیریزه. ممنون میشم راهنمایی کنید.

tdkhakpur
شنبه 17 مهر 1389, 18:03 عصر
در حلقه ای که دادید نباید ایندکس از حد موجود در حلقه اضافه باشه ولی شما از i+1 را در داخل حلقه برای ایندکس استفاده کردید در صورتی که حافظه رزرو شده شما 256 هست که در اینصورت میشه 257 و خارج از محدوده و این میتونه باعث این مشکل باشه.
حلقه را بصورت زیر اصلاح کنید


for(int i=0;i<256-1;i++)

root88
شنبه 17 مهر 1389, 20:00 عصر
ممنون اما مشکل همچنان پابرجاست. من داده زیر رو در فایلی که قراره ازش خونده بشه ریختم اما نمی تونه شناسه ها رو جدا کنه (در حالیکه اگه تعدادشون تا 244 باشه مشکلی نداره) و فایل مقصد که قراره شناسه های جدا شده توش ریخته بشه خالیه .



hhhhhhhhhhhhhhhhhh mhujnkykjhf+ hhjkkj+6778889986788= 89964399 kjkdhhhjhjj+ 111111111-111111111111111111111+111111111111111+ 222222222222222222222220 + fghjklopiuytrewqasdf+ 333333333333*333333333333333333+ hhhhhhhhhhhhhhhhhhh+ kkkk+123456789+123654789+123
iiiiiioui

tdkhakpur
یک شنبه 18 مهر 1389, 09:57 صبح
ندانستم چیکار کردی ولی اینطوری ببین همان خاسته شما میشه.


void rew(){
int m=0,flag=0, c;
char a[256+1],ch;
ifstream infile ("text.txt", ios_base::in);
ofstream outfile("neshane.txt", ios_base::out );
infile.getline(a,256);
while(a[0]!=0){
for(int i=0;i<256;i++)
{
int c=a[i];
if(flag==1){
while(a[i]!='*' && a[i+1]!='/')
i++;
i--;
flag=0;
}
if((c>=65 && c<=90)|| (c>=96 && c<=122)){ // the range of asci code for lower case and upper case alphabet.
outfile.put(a[i]);
m=1; // the current character is an alphbet.
}
if((c>=48 && c<=57)){ // the range of asci code for numbers(0-9).
outfile.put(a[i]);
m=2; // the current character is a number.
}
switch(c){
case 58: // the asci code for ":" character.
if(m==1 || m==2 || m==4){
outfile.put('\n');
outfile.put(a[i]);
if(a[i+1]=='='){
outfile.put(a[i+1]);
i++;
}
m=3; // the current character is not a number or an alphabet.
outfile.put('\n');
}
else {
cout<<"ERROR";
// exit(-1);
}
break;
case 40: // the asci code for "(" sign.
case 41: // the asci code for ")" sign.
case 43: // the asci code for "+" sign.
case 45: // the asci code for "-" sign.
case 61: // the asci code for "=" sign.
if(m==1 || m==2 || m==4){
outfile.put('\n');
outfile.put(a[i]);
m=3;
outfile.put('\n');
}
else{
cout<<"ERROR";
//exit(-1);
}
break;
case 62: // the asci code for ">"sign.
if(m==1 || m==2 || m==4){
outfile.put('\n');
outfile.put(a[i]);
if(a[i+1]=='='){
outfile.put(a[i+1]);
i++;
}
m=3;
outfile.put('\n');
}
else{
cout<<"ERROR";
//exit(-1);
}
break;
case 60: // the asci code for "<" sign.
if(m==1 || m==2 || m==4){
outfile.put('\n');
outfile.put(a[i]);
if(a[i+1]== '='){
outfile.put(a[i+1]);
i++;
}
m=3;
outfile.put('\n');
}
else{
cout<<"ERROR";
//exit(-1);
}
break;
case 42: // the asci code for "*" sign.
if(m==1 || m==2 || m==4){
outfile.put('\n');
outfile.put(a[i]);
if(a[i+1]=='/'){ // the end of comments.
outfile.put(a[i+1]);
i++;
}
m=3;
outfile.put('\n');
}
else{
cout<<"ERROR";
// exit(-1);
}
break;
case 47: // the asci code for "/" sign.
if(m==1 || m==2 || m==4){
outfile.put('\n');
outfile.put(a[i]);
if(a[i+1]=='*'){
flag=1;
outfile.put(a[i+1]);
i++;
}
m=3;
outfile.put('\n');
}else{
cout<<"ERROR";
//exit(-1);
}
break;
case 32: // the asci code for space.
outfile.put('\n');
m=4;
break;
default:
break;
}
}
infile.getline(a,256);
}
}

root88
یک شنبه 18 مهر 1389, 21:34 عصر
ممنونم مشکل برنامه رو حل کردم. به خاط این بود که ارایه رو خالی نمی کردم.