PDA

View Full Version : جدا كردن رشته و عدد از يك خط فايل



first_squit
دوشنبه 04 خرداد 1388, 13:11 عصر
با سلام خدمت دوستان هنرمند


يه مشكل در خوندن اطلاعات از فايل رو دارم :گریه:

در يك خط از فايل ممكن يه رشته عدد (يا يه رشته از حروف و عدد )(‌البته با قالبي كه از اون خبر داريم ) وجود داشته با شه

حالا من مي خوام يه خط از فايل رو بخونم (getline) و عداد و رشته هايي كه ممكن با استفاده از Tab يا Space و يا هر كاراكتر جدا مكننداي از هم جدادشدند رو تشخيص بدم .

متشكرم

tdkhakpur
دوشنبه 04 خرداد 1388, 16:23 عصر
سلام:
من نمیدونم فایل شما از چه نوعی هست ولی اگه از نوع Textباشه . نباید به نوعش فکر کنید چون بالاخره همشون کاراکتر هستند.
برای اینکار شما دستور زیر رو برای دریافت رشته به کار ببر.(البته یه تابع هست ولی الان help کامپایلر کنارم نیست براتون بگم ولی کدی رو که این کار رو برات انجام میده رو میزارم.)



char ch, buffer;
int c=0;
FILE *fp;

ch = fgetc(fp);
while( ch != 10 || ch != 32 || ch !=EOF )
{
buffer[c++] = ch;
buffer[c] =0;
ch = fgetc(fp);
}

کدهای فوق فقط یه رشته رو که از رشته های دیگه جداست رو برات میخونه و توی باففر قررار میده

first_squit
دوشنبه 04 خرداد 1388, 19:59 عصر
از پاسخ شما متشكرم


اينم اصلاح شده كد شما دوست عزيز براي خواندن يك خط از برنامه و جدا سازي



ifstream FileOpen ("..//Fileinput.txt" , ios::in );
char StringM[Maxlensize];
FileOpen.getline(StringM , Maxlensize);

while(!FileOpen.eof())
{
int i =0 ;
while(StringM[i] != '\0')
{
if(StringM[i] == 10 || StringM[i] == 32)
printf("\n");
else
printf("%c" ,StringM[i]);

i++;
}
printf("\n");
FileOpen.getline(StringM , Maxlensize);
}

first_squit
دوشنبه 04 خرداد 1388, 20:18 عصر
اما خواندن يك عدد اعشار از فايل به چه صورت انجام مي شه


من مي دونم در يكي از خط هاي فايلم يك عدد اعشار قرار داره (مثالا 68.4 ) حالا مي خوام اونو بخونم و در يك متغير از نوع float قرار بدم .

مي شه دوستان بگن كه چطوري انجامش بدم

متشكرم

tdkhakpur
دوشنبه 04 خرداد 1388, 22:14 عصر
سلام:
خوب اگه موقعیت عدد رد توی بافر خط بدونی یه تابع به اسم atoi هست که به شکل زیر مقدار عدد یه رaته رو برمیگردونه. یه نگاهی به Help بنداز اگه برای اعشار چیزی پیدا نکردی ارسال کن حتما کمکت میکنم.


int k= atoi(str);

first_squit
دوشنبه 04 خرداد 1388, 22:50 عصر
متشكرم

از توابع زير براي تبديل رشته استفاده مي گردد



int a = atoi(String);
double a = atof(String);
long a = atol(String);

tdkhakpur
دوشنبه 04 خرداد 1388, 22:57 عصر
سلام:
بالاخره ما نفهمیدیم شما سوال می پرسی یا جواب میدی یا چی؟:متفکر:

Mbt925
چهارشنبه 06 خرداد 1388, 14:08 عصر
کد زیر رشته ای حاوی عدد و کاراکتر می گیره ( بدون فاصله از هم) و عدد ها و رشته ها رو جدا کرده و چاپ می کنه:


#include <sstream>
#include <string>
#include <iostream>
using namespace std;

int main()
{

string str;

cin>> str;

stringstream ss(str,ios_base::in);

char c= ss.get();
int num;

str="";
while(c!=EOF)
{
if ( c>='0' && c<='9')
{
if (!str.empty())
cout << str << endl;
str="";

ss.unget();
ss >> num;
cout << num << endl;
}
else
str.push_back(c);

c= ss.get();
}

if (!str.empty())
cout << str << endl;

return 0;
}