PDA

View Full Version : سوال درباره خواندن از فايل



zahra.mf
چهارشنبه 11 آبان 1390, 19:21 عصر
سلام
من يه فايل متني دارم كه ميخام تو يه برنامه ديكه فراخوانيش كنم و ازش بخونم ميبخام ازفايل متني از يه خط كه مثلا 10تا كاراكتر داره 5تا كاراكتر اول و بخونم يه كاراكتر نخونم بعد 4تا كاراكتربعدي و بخونم و تو برنامه اصلي 5تاي اول و بريزم تو يه ارايه و4تاي ديكه رو بريزم تو يه ارايه ديكه كتاب cجعفر نزاد و كه خوندم اين طور فهميدم كه بايد از تابع fseekوfreadبايد استفاده كنم ولي اصلا طرز استفادش و نفهميدم!!اصلا جيزي كه فهميدم راه خوبيه يا راه بهتري هم هست

developing
پنج شنبه 12 آبان 1390, 10:28 صبح
با سلام

با استفاده از تابع fseek شما مي تونيد در فايل گردش كنيد بدين صورت كه اگه بخوايد به اول فايل بريد از دستور زير:


FILE *pFile;
pFile = fopen ( "example.txt" , "w" );
fseek ( pFile , 0, SEEK_SET );


و اگه بخوايد به مكان 20 از فايل بريد به شكل زير:

fseek ( pFile , 20 , SEEK_SET );

در مورد تابع fread هم مي توانيد به شكل زير عمل نماييد:

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

توضيح: به تعداد count در آرايه ي buffer كه شما تعريف مي كنيد از مكان جاري فايل مي خونه
اندازه ي هر خانه از آرايه ي بافر (به بايت) توسط size نمايش داده مي شود.
به طور مثال قطعه برنامه ي زير 10 بايت (كه هر عنصر آرايه 1 بايت مي باشد) از مكان جاري را در آرايه ي بافر مي ريزد:

char *buffer;
fread (buffer,1,10,pFile);

حالا ديگه بقيه اش با شما چون توي اين سايت براي شما كد نوشته نمي شود.

راستي لينك هاي زير هم مي تونن به شما كمك كنن:
تابع fseek (http://www.cplusplus.com/reference/clibrary/cstdio/fseek/)
تابع fread (http://www.cplusplus.com/reference/clibrary/cstdio/fread/)

zahra.mf
پنج شنبه 12 آبان 1390, 15:54 عصر
سلام
ممنون به خاطر راهنماييتون
مشكلي كه الان دارم اينه كه نه تنها از فايلي كه وجود داره جيزي نميخونه تازه دست كاريش هم ميكنه و كلا همه اطلاعات داخلش و از بين ميبره!!

quiet_programmer
پنج شنبه 12 آبان 1390, 19:45 عصر
با سلام.


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

نحوه باز کردن فایل مورد داره. اگه فایل رو برای نوشتن باز کنی این اتفاق می افته. شما فایل رو برای خواندن باز کنین.

البته اگه کدت رو بزاری بهتر راهنمایی میشی.

یاحق.
موفق باشید.

zahra.mf
پنج شنبه 12 آبان 1390, 20:36 عصر
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *a;
char port[10],user[10],pass[10];
a=fopen("server.conf","r");
fseek(a,0,SEEK_SET);
fread(port,sizeof(char),4,a);
printf("port[10]");
fseek(a,20,SEEK_SET);
fread(user,sizeof(char),5,a);
printf("user");
fseek(a,27,SEEK_SET);
fread(pass,sizeof(char),4,a);
printf("pass[10]");
fclose(a);
return 0;
}


اين برناممه قراره از فايلي كه به شكل زير خط اول و خط 4و بخونه وخط 4هر اسم وتو يه ارايه بريزه كه نميخونه!
1390
localhost
#user
zahra:mina

developing
شنبه 14 آبان 1390, 09:29 صبح
با سلام

چون فايل برنامه ي شما توي چند خط نوشته شده است بايد ببينيد در سيستم شما خط بعد رو با يك كاراكتر (يعني با n\ ) نمايش مي ده يا با دو تا كاراكتر( يعني n\ و r\)

اگر از يك كاراكتر براي نمايش خط بعد استفاده مي كنه خط 9 به جاي 4 كه مكان حرف L در localhost مي شود بايد عدد 5 را وارد كنيد
در غير اينصورت مي شود 6 (توجه كنيد كه شروع از صفر است)
نكته: من در سيستم خودم امتحان كردم دومي شد.

براي نوشتن يك متغير رشته اي در خروجي توسط دستور printf بايد به صورت زير عمل كنيد:
printf("ُStatic String %s", str");
كه Static String رشته ايست كه به همان صورت نمايش داده مي شود و متغير رشته اي شما هم به جاي str آورده مي شود. مثلا براي نوشتن مقدار داخل پورت رو بايد به صورت زير بنويسيد:
printf("Port is : %s " , port);

توجه: با استفاده از دستور fread شما هر چند 4 كاراكتر از فايل مي خوانيد ولي تمام آرايه ي شما در هنگام نوشته شدن با دستور printf نوشته مي شود(دليل اين است كه كاراكتر 0\ كه انتهاي رشته را نشان مي دهد در آخر رشته ي خوانده شده قرار نمي گيرد) براي اين كه از اين اشكال هم در امان بمانيد بهتر است از دستور fscanf استفاده كنيد. به شكل زير:
به جاي
fread(port,sizeof(char),4,a);
از اين دستور استفاده كنيد:
fscanf(a,"%4s",port);

اگر خواستيد كاراكترهاي بيشتري بخوانيد كافي است به جاي 4 بنويسيد مثلا 14

در ضمن دستورات شما درست مي باشد و هيچ اطلاعاتي پاك نمي شود.

zahra.mf
شنبه 14 آبان 1390, 18:50 عصر
سلام
خيلي ممنون به خاطر راهنماييتون خيلي بهم كمك كرد مخصوصا به خاطرfscanfخيلي بهم كمك كرد
ممنون