PDA

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



amir-yeketaz
چهارشنبه 02 دی 1388, 14:58 عصر
سلام
من یه برنامه میخوام که یه فایل با نامش که کاربر نامشو انتخاب کنه تو یه درایو یا یه فولدر تو یه درایو بریزه و هر چی دلش خواست توش وارد کنه (عدد،حرف،spaceو...) و تو یه فایل دیگه بیاد اعداد صحیح یا اعشاری رو بریزه یعنی مثلا تو فایل داریم

am efkjd12sldjkad12 kasjd 12.1 dja345
بعد بیاد تو فایل دوم یعنی فایل چاپش اینجوری چاپ کنه
12
12
12.1
345
میبینید که هر عددی رو که میگیره یه خط میره پایینتر یعنی باید این کارم انجام بشه
ببینید من ترم اولیم و درسامونو و تمرینام تموم شده
این سوال یه سوال تو امتحانمون بود که هنوز استادمون چنین سوالی رو طرح نکرده بود و من اصلا نمیدونم چجوری باید حلش کرد پس از مدیر این بخش خواهش میکنم که احساس نکنن که من تمرین دانشجویی دادم و بیانو تاپیکمو حذف کنن
در ضمن بگم که فقط از توابع fscanf و fprintf میخوام استفاده کنم نه با امکانات بیشتر
یه چیز دیگه نوع فایلش متنی (notepad) باشه
واقعا ممنون میشم اگه به من کمک کنید :خجالت:
خیلی نوکریم:چشمک:

qwerty11
چهارشنبه 02 دی 1388, 16:46 عصر
خوب دوست عزیز کار با فایل رو که بلد هستید ایشالا !؟

فکر نمیکنم نیازی باشه تمام کد نوشته بشه. فرض کن فایل اولیه اسمش input هست و فایل دومیه که قراره توش بنویسیم اسمش output هستش. راستی این فایل اولیه فقط یه خط داره !؟



char str[100];
fscanf(input, "%s", str);

for(int i=0; i<strlen(str); i++){
if(str[i]>='0' && str[i]<='9'){
while(str[i]>='0' && str[i]<='9'){
fprintf(output,"%c",str[i]);
i++;
}
if(str[i]=='.' && str[i+1]>='0' && str[i+1]<='9'){
fprintf(output,".");
i++;
while(str[i]>='0' && str[i]<='9'){
fprintf(output,"%c",str[i]);
i++;
}
}
fprintf(output,"\n");
}
}

amir-yeketaz
چهارشنبه 02 دی 1388, 23:51 عصر
نه
هر چی می خواد باشه دو خط سه خط ...
الان اینی که شما نوشتین نام فایل رو هم مشخص میکنه ؟؟

qwerty11
پنج شنبه 03 دی 1388, 08:32 صبح
در مورد اینکه اسم فایل رو هم مشخص میکنه یا نه ، خوب من فکر کردم اونجاش رو بلدی !!
اما به هر حال این قسمت رو میتونی به ابتدای برنامت اضافه کنی :



FILE *input,*output;
char name_input[100],name_output[100];
scanf("%s%s",name_input,name_output);
input=fopen(name_input,"r");
outout=fopen(name_output,"w");

و اما اینکه چجوی بفهمی انتهای فایل هستی یا نه :


while( fscanf( input, " %s", str) !=EOF )

amir-yeketaz
پنج شنبه 03 دی 1388, 11:24 صبح
در مورد اینکه اسم فایل رو هم مشخص میکنه یا نه ، خوب من فکر کردم اونجاش رو بلدی !!
اما به هر حال این قسمت رو میتونی به ابتدای برنامت اضافه کنی :



FILE *input,*output;
char name_input[100],name_output[100];
scanf("%s%s",name_input,name_output);
input=fopen(name_input,"r");
outout=fopen(name_output,"w");


]



ببینید این که نوشتین درست ولی اگه بخوایم آدرس بذارم چی؟
یعنی بخوایم فایل تو مثلا درایو سی ریخته بشه یا تو یه فولدر تو درایو سی؟؟؟

amir-yeketaz
پنج شنبه 03 دی 1388, 11:37 صبح
خواهشا میشه برنامه کامل اون چیزی که تا حالا رو گفتم بنویسین
خیلی خیلی ممنون

qwerty11
پنج شنبه 03 دی 1388, 12:28 عصر
ببینید این که نوشتین درست ولی اگه بخوایم آدرس بذارم چی؟
یعنی بخوایم فایل تو مثلا درایو سی ریخته بشه یا تو یه فولدر تو درایو سی؟؟؟
وا !!! خوب تو همون قسمت input_name میتونی آدرس هم بدی دیگه !! یعنی مثلاً input_name رو c:\\aa.txt بزاری.

کل برنامه !؟ هرجوری فکر میکنم میبینم کل برنامه رو نوشتم ! ولی به هر حال :



void main(){
FILE *input,*output;
char name_input[100],name_output[100];
scanf("%s%s",name_input,name_output);
input=fopen(name_input,"r");
output=fopen(name_output,"w");
char str[100];
while( fscanf( input, " %s", str) !=EOF ){
for(int i=0; i<strlen(str); i++){
if(str[i]>='0' && str[i]<='9'){
while(str[i]>='0' && str[i]<='9'){
fprintf(output,"%c",str[i]);
i++;
}
if(str[i]=='.' && str[i+1]>='0' && str[i+1]<='9'){
fprintf(output,".");
i++;
while(str[i]>='0' && str[i]<='9'){
fprintf(output,"%c",str[i]);
i++;
}
}
fprintf(output,"\n");
}
}
}
}