آموزش فایل در c++ قسمت دوم خواندن فایل

آموزش فایل در ++c: خواندن اطلاعات از فایل متنی [قسمت دوم]

آموزش فایل در c++ قسمت دوم خواندن فایل

آپدیت : بعد از خواندن نوشته برای به دست آوردن مطالب بیشتر در مورد فایل ها به این پست بروید : آموزش کامل فایل ها در سی پلاس پلاس

در قسمت اول آموزش فایل نوشتن در فایل را یادگرفتیم .در این قسمت خواندن اطلاعات از فایل متنی را یاد خواهیم گرفت.برای استفاده از امکانات فایل ++c باید کتابخانه fstream را برنامه متصل کرد:

در قسمت اول هنگام  نوشتن فایل از کلاس ofstream استفاده کردیم ولی برای خواندن فایل باید از کلاس ifstream استفاده کنیم .برای باز کردن یک فایل متنی باید یک اشاره کننده به فایل داشنه باشیم فرض کنید فایلی را به اسم input_file.txt که فرمت آن تکست است را می خواهیم باز کنیم  .در برنامه نویسی ما مستقیم از اسم فایل استفاده نمی کنیم بلکه از اشاره گری به آن فایل استفاده می کنیم که استفاده از فایل را آسان تر می کند .در زیر ما اشاره گری به اسم fp برای فایل input_file.txt ایجاد می کنیم که شی از کلاس ifstream است:

در بالا ios::in یعنی بازکن برای عمل ورودی.

وقتی ما دستور بالا را اجرا می کنیم باید فایلی با چنین اسمی در فایل جاری برنامه باشد اگر این برنامه کار نخواهد کرد زیرا شما فایل را برای خواندن اطلاعات باز می کنید پس منطقی آن است که باید فایلی وجود داشته باشد که شما می خواهید آن را باز کنید.شما می توانید این فایل را به دو صورت درست کنید یکی آن که به صورت درستی یک فایل تکست درست کنید یا با استفاده از برنامه فایل را درست کنید و اقدام به خواندن آن کنید.به همین خاطر بهتر است چک کنید ببینید فایل باز شده است یا نه:

cerr در سی ++ پیغام های خطا را می نویسد که در کتابخانه iostream است و exit هم به برنامه پایان می دهد مقداری غیر صفر را برمی گرداند که نشان دهنده خطا در برنامه برای کامپایلر و سیستم عامل است و در کتابخانه cstdio قرار دارد.

ریختن اطلاعات از فایل به یک متغییر:فرض کنید شما فایلی دارید که در آن یک عدد صحیح است و می خواهید آن را از روی فایل بخوانید، ابتدا یک متغییر صحیح تعریف می کنیم و مانند کد زیر عدد را از فایل می خوانیم:

اینطوری عدد توی فایل در متغییر number قرار می گیرد و شما هر کاری که بخواهید می توانید با آن بکنید.

برنامه برای تمرین بیشتر با فایل:

این برنامه اسم و فامیل و نمره افرادی را که در فایل قرار دارد را می خواند .اول ما باید فایلی در پوشه جاری برنامه داشته باشیم همون پوشه ای که برنامه توش قرار داره .

بهترین راه اینه که اونو خودمون درست کنیم پس در پوشه برنامه ابتدا فایلی با فرمت text درست کنید و بعد اسم اونو input_file بگذارید .حالا نوبت نوشتن اطلاعات در آن است مانند شکل زیر در هر خط مشخصات یک نفر را بنویسید اول اسم بعد یک space بزنید بعد یک فامیل دوباره space بعد نمره بعد اینتر بزنید برید خط و مشخصات نفر بعد هر چند تا خواستید بنویسید و بعد فایل را save کنید و برنامه را اجرا کنید .تبریک می گم اولین برنامه خواندن از فایل متنی خود را نوشته اید.

 

ساخت فایل به صورت دستی
ساخت فایل به صورت دستی

شاید برای شما سوال پیش آمده باشد که این قسمت در کد یعنی چه:

 

یعنی تا وقتی عبارت fp>>firstName>>lastName>>grad اطلاعات مورد نظر ما را از فایل می خواند (به ته فایل نرسیده باشیم)شرط درون حلقه را اجرا کن شرط درون حلقه هم چاپ کردن دیتای خوانده شده از فایل است.

 

اینم عکس خروجی:

 

خروجی برنامه اطلاعات را در خروجی چاپ می کند.
خروجی برنامه،برنامه اطلاعات را در خروجی چاپ می کند.

 

همچنین می توانید بخوانید: بخش اول آموزش کار با فایل

 

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

۴۹ دیدگاه

  • سلام آقای دلیرانی برای اینکه اطلاعات رو از فایل اکسل بخونه و چند ستون داریم قاتی نکنه چه باید کرد

    • اکسل یک سری API داره که می شه به کمک اون کار کرد. که توی دات نت هستند. خیلی وقت پیش باهاشون کار کردم چیزی یادم نیست ولی برو ای پی آی های مایکروسافت برای اکسل ببین.

  • خب اقا اومدیم و داده های ما زیاد بود بیشتر از حافظه رم دستگاه حالا نمیتونیم برای سورت کردن اونارو داخل ارایه انداخت و شاید حافظه هارد کم بود نتونیم اونارو بریزیم داخل یه فایل دیگه فایل ما ١٠ گیگ بود
    ایا ما نمیتونیم از طریق جابه جا کردن اشاره گر خواندن اینارو داخل همون فایل جابه جا کنیم ؟؟

    • یک الگوریتم هست به اسم
      merge
      که دو آرایه ی سورت شده رو می گیره و اون ها رو تبدیل به یک آرایه ی سورت شده می کنه – که جواب مشکل شماست

  • سلام
    برای حذف یا ویرایش اطلاعاتی که ثبت کردیم چیکار باید بکنیم؟
    ممنون از سایت خوبتون

    • توی کامنت های دیگه گفتم – باید فایل بخونی و توی یک فایل دیگه بریزی و هر جایش رو خواستید تغییر بدهید و بعد از پایان کار محتویات قایل دوم را دوباره در سرجایش یعنی فایل اصلی بریزید

  • سلام
    من میخوام برنامه ای بنویسم که جند عدد رو از فایل text بگیره و در آرایه بریزه و مرتب کنه
    لطفا راهنماییم کنید و ایمیل بزنید

  • سلام
    من یک فایل متنی دارم که می خواهم آن را c++ بخواند و حالت ماتریس(آرایه ۲بعدی) ذخیره کند.فایل متنی دارای ۲۰۲ ستون و حدود۱۰۰۰۰ سطر است.می شود لطفا راهنمایی نمایید
    با تشکر

    • int arr[10000][202];
      istream f(“File path”);

      for(int i=0; i<10000; i++)
      for(int j=0; j<202; j++)
      f >> arr[i][j];

      • آرش عظیمی فرد

        سلام ببخشید ولی وقتی تعداد زیاد باشه سی ++ نمیخونشون.فقط ۲۱۰ تارو میخونه چیکار باید بکنم.مثلا بخوام ۱۰۰۰تا عدد رو از داخل فایل txt بخونه و بریزه تو یه آرایه …..ولی فقط ۲۱۰ تاشون خونده میشه.

        • این رو اولین باره می شنوم ! بهتره توی یک جای بهتر مثل stackoverflow بپرسید که بتوانند کمک کنند! چون من تست کردم همین چند دقیقه پیش! نزدیک ۱۰ میلیون عدد رو ریختم تو یک فایل و خواندم!

          البته نمی دونم هر هدام از اون دویست ها و ده تا موردی که گفتی یک عدد است یا یک شی که جمش زیاد است! اگر عدد است یک اتفاق عجیب است که دلیلش را نمی دادنم! ولی اگر یک شی هستند و حجمش بسیار زیاد است ممکن است مشکل پیش بیاید! کلا فایل ها تا زمانی که حجم داده ها کم باشد جواب گو هستند! بعد از اینکه حجم داده ها خیلی زیاد بشود معمولا دیتا ها گم می شوند یا یک بلایی سرشون میاد! که می تونی در این مورد از دیتا بیس استفاده کنی یا اطلاعاتت را بشکانی و در چند فایل ذخیره کنی یک یک بار خودم این کار را کردم و جواب داد

  • سلام
    اگه فایل ورودی مثلا ۴ تا ستون داشت و ما فقط میخواستیم ۳ تا ستون اول رو در متغر های firstname , lastname , grad قرار بدیم باید چکار میکردیم.
    چون من امتحان کردم و برنامه دچار مشکل شد.و ستون چهارم رو هم میخوند و بعد از خوندن ستون چهارم به ابتدای سطر بعد میرفت.
    اگه ممکنه راهنمایی بفرمایید
    ممنون

    • در این حالت باید بافر ورودی را نادیده گرفته یا تخلیه کنید.
      من سه روش راپیشنهاد میکنم:
      ۱) فرض کنید نوع ستون سومی که در ورودی خواهد بود را میدانید ! یک متغییر به آن نوع در نظر گرفته و از فایل بخوانید اما استفاده نکنید !
      ۲) فرض کنید میدانید حداکثر تعداد کاراکتر هایی که در ستون بعدی خواهد آمد چه تعداد است ! پس از دستور std::cin.ignore(256,’\n’); استفاده میکنیم. که در این دستور تا ۲۵۶ کاراکتر را میخواند و تا به خط بعدی نرود ادامه میدهد
      ۳) هیچ اطلاعاتی در مورد اندازه و نوع داده ندارید پس تابعی بنویسی تا با خواندن کاراکتر به کاراکتر از ورودی در مورد آن قضاوت کند.

      موفق باشید

  • ببخشید من میخواستم اطلاعات فایل زیرو تو یک آرایه بریزم

    module test (input a , input b , input c , output o1 , output o2);

    wire w0;

    and (3) m0 (a , b , o1);
    and (3) m1 (b , c , w0);
    and (2) m2 (w0 , o1 , o2);

    endmodule

    چطور باید این کارو انجام بدم ؟

    • این به نظر کد شبیه سازی گیت های منطقی باشه !
      چه چیزی از این متن رو در آرایه بریزید ؟
      هر خط از متن ؟
      اعداد ؟
      چه نوع آرایه ای ؟

      بیشتر توضیح بدید

  • سلام ببخشید اگه بخواهیم چهارتا چیز از فایل بخونیم باید چیکارکنیم اخه تو برنامه من ۳ تا چیزمیخونه اما اگه بخوام ۴تا بخونم هیچی رو نمی خونه؟؟

  • دستتون درد نکنه خیلی کمک کرد

  • با عرض سلام و خسته نباشید
    اگر ما یک فایل رو درج و ذخیره کرده باشیم پس از لود کردن فیل و سرچ و پیدا کردن فرکورد فایل مورد نظر چگونه می توانیم ان رکورد را کامل حذف کنیم یعی کدش چیه
    با تشکر

  • سلام.
    من میخوام فایل خروجیم اطلاعات داخلش فارسی باشه یعنی مثلا بنویسم علیرضا فارسی باشه.چجوری بنویسم؟

  • سلام اقای دلیرانی میخواستم بدونم که کتابخونه ی سر آیند operator چیه؟

  • سلام آقای دلیرانی ،میخواستم خواهش کنم یه برنامه الگوریتم srtf
    برام بنویسید بعد کامنتهای کدهاش هم با فارسی برام توضیح دهید
    ممنون میشم اگه امکان داره برام ایمیل کنید.
    s_sohrabi2012@yahoo.com

  • سلام تورو خدا کمکم کنید. باید این دو تا برنامه++cرا با visuai stodioبنویسم فقطم تا جمعه صبح وقت دارم.لطفا برام ایمیل کنید یا حداقل کمک کنید
    ممنون

    ۱- برنامهای بنویسید که دو رشته از کاربر دریافت کند و نشان دهد چه تعداد کلمهی
    مشابه در دو رشته وجود دارد. )کلمهها با space از هم جدا میشوند.(

  • سلام میشه بگین چطوری بنویسیم کاربر خودش فایل رو باز کنه !!؟ ممنون میشم مرسی

  • تو رو خدا کمکم کنید اگه کد ها رو بلدین برام بنویسید ممنون
    ویرایش یک رکورد خاص-نمایش کلیه رکورد ها- حذف رکورد های خاص- نمایش رکوردخاص -ذخیره سازی رکور- ایجاد فایل باینری -ویرایش یک فایل متنی- نمایش یک فایل متنی- اضافه کردن یک مطلب- ایجاد یک فایل با نام های مختلف
    ممنون کمک بزرگی بهم میکنید.
    akram.mohamadi8022@gmail.com

  • سلام خسته نباشید میخاستم با پارالل برنامه بنویسم کمکم میکنید هربرنامه باشه فقط با whileباشه نه forممنون میشم

  • (۸+۸) * ۸
    (۸+۸) / ۸ (از راست بخونید)
    را از هم کم کن
    در یک هشت دیگر ضرب کن
    و از یک هشت دیگر کم کن
    رادیکال هم نمیخواد!
    حالا تهش ۱۰۰۰ شد؟! 😀

    • فرهاد دلیرانی

      درسته .هر دو مون یک کار رو کردیم، شما حساب کردید که با هفتا هشت به عدد هزار هشت برسید و یک هشت ازش کم کردید که شده هشت تا هشت و عدد هزار ،من هم تقریبا همچین کاری کردم یعنی حساب کردم با هفت تا هشت به هزار برسم و بعد یکی از هشتا رو نوشتم رادیکال هشت ضرب در رادیکال هشت .

    • فرهاد دلیرانی

      فکر کنم زیر پست اشتباهی نظر گذاشتید این نظر باید زیر یک پست دیگه می ذاشتید.

  • سلام آقای دلیرانی
    بابت آموزش خواندن اطلاعات از فایل متنی متشکرم خیلی خوب بود ….
    اگه در مورد کنترول پورتای پارالل با c++ هم کمکم کنید خوشال میشم !

  • سلام اقای دلیرانی
    شما حل تمرین ساختمان داده هورویتز رو دارید؟
    میشه برام ایمیل کنید…..
    ممنون

  • آمنه کنعانی

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

    • فرهاد دلیرانی

      سلام ، چرا نمی شه ولی شما باید یه رزومه از چیزهایی که بلدید را به همراه یک مطلب که خودتون نوشتید به من ارسال کنید.

  • باسلام.من یه سوال دارم خیلیم کارم گیرشه!!لطفا اگه بلدید کمکم کنید.
    تقریبا مثل مثال خودتون میخام یه فایلی رو که توش اسمو نمره و شماره دانشجویی ذخیره شده رو بخونم.. و یه شماره دانشجویی از کاربر بگیرم و توی فایل جستجو کنم و اگر موجود بود با اطلاعات دیگه(اسم و نمره) چاپش کنم..لطفا یگید چجوری باید بنویسم:(((
    لطفا به ایمیلم جواب بدید.ممنون

  • سلام میخاستم بپرسم در c++ میشه بجای اینکه داخل برنامه دستورات رو بنویسیم داخل فایل بنویسیم سپس برنامه از داخل فایل دستورات رو بخونه و اجرا کنه؟ ممنون.

    • فرهاد دلیرانی

      شما می توانید به فایل main.cpp توجه شود البته این فایل با کامپایلر code blocks اسم این فایل در کامپایلر ویژوال فرق می کند

  • فایل باینری هم بگو .تشکر ایده سایت خیلی خوبه ادامه بدید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *