সি ++ কীভাবে কোনও অ্যারেতে ফাইল পড়তে হয়


উত্তর 1:

সি ++ ফাইল অ্যাক্সেস করতে সি স্ট্যান্ডার্ড আই / ও ব্যবহার করে। সুতরাং সি কোড ঠিক কাজ করবে।

সি ++ এর কাছে কিছু চমৎকার আইস্ট্রিম অবজেক্ট রয়েছে যা এই উপায়ে বেশ কয়েকটি দুর্দান্ত স্টাফ করে।

এটি ফাইলের ফর্ম্যাটটি জানতে সহায়তা করে। আপনি কি কমাগুলি বিচ্ছিন্ন সংখ্যা, স্থান পৃথকীকরণ, বা প্রতি লাইনে এক-এক পড়ছেন?

আপনি ঠিক বলেছেন যে তারা সংখ্যা নয়, তবে সংখ্যাযুক্ত পাঠ্য। পাঠ্যগুলি পড়ার পরে আপনাকে সংখ্যাগুলিতে রূপান্তর করতে হবে। কী ধরণের সংখ্যা জেনে নেই, সমস্ত বেটটি coverাকতে ডাবল ব্যবহার করুন।

মাইকেল বাউয়ার্স উত্তরটি ভাল তবে ব্যাখ্যাটির অভাব রয়েছে।

ফাইলটি পাঠ্য পাঠ্যের পাঠ্যকে সংখ্যায় রূপান্তর করুন পাঠাতে হবে। ফাইল বন্ধ করুন

আমার গ্রহণ:

একটি ফাইল থেকে একটি ভেক্টরের মধ্যে নম্বর ফিড করতে একটি অপারেটর তৈরি করুন।

নম্বর ভেক্টর খুলুন ফাইল ভেক্টর বন্ধ ফাইল ব্যবহার ভেক্টর পূরণ করতে অপারেটর প্রয়োগ করুন

// একটি অপারেটর তৈরি >> ভেক্টর এবং istream সঙ্গে কাজ করতে std :: istream & অপারেটর >> (std :: istream & in, std :: vector) & ভি){ ডাবল ডি; যখন (ইন >> ডি) // ifstream পাঠ্য-> ডাবল রূপান্তর করেv.push_back (d); // ভেক্টরে যুক্ত করুন ফিরে // istream নিজেই ফেরত দেয়} // ডাবলস ধরে রাখার জন্য ভেক্টর তৈরি করুনstd :: ভেক্টর পুরাতন;std :: ifstream ইনপুট ফাইল file "file.txt"}; // {হ'ল 'সূচনা তালিকা' সিনট্যাক্স (ইনপুট ফাইল)ইনপুট ফাইল >> মাইনিং; // সম্পন্ন হওয়া পর্যন্ত সমস্ত নম্বর ইনপুট করুনইনপুটফিল.কম (); // ফাইলটি বন্ধ করুন// এখন ভেক্টর লোড হয়েছে, ফাইল বন্ধ রয়েছে - প্রস্তুত।

পঠন লুপটি অপারেটর >> ফাংশনে রয়েছে তাই সিনট্যাক্স ক্ষুদ্র তবে খুব পঠনযোগ্য। যে কোনও কিছুতেই ভুল হয় (ফাইল খুঁজে পাওয়া যায়নি, কোনও ডেটা নেই ..) এবং ifstream নিজেকে পরিষ্কার করে দেয় এবং ব্যর্থতার ব্যতিক্রম উত্পন্ন করে যা আপনি ধরতে পারেন বা প্রোগ্রামটিকে মরে যেতে দিতে পারেন।


উত্তর 2:

প্রশ্ন: আমি কীভাবে পাঠ্য ফাইলে সংখ্যাগুলি সি ++ এ অ্যারে পড়তে পারি?

এই একই প্রশ্নটিতে 3 জন লোকের কাছ থেকে বাহ্য 3 টির অনুরোধ। অদ্ভুত! প্রায় মনে হয় কেউ কেউ কোওরাকে জিজ্ঞাসা করার পরিবর্তে উত্তর নির্ধারণ করতে গুগল করতে পারে। আমার গুগল করার দরকার নেই - আমি মেমরি এবং আমার মন থেকে কোডটি লিখতে পারি:

# অন্তর্ভুক্ত # অন্তর্ভুক্ত # অন্তর্ভুক্ত নেমস্পেস স্ট্যান্ড ব্যবহার করে;int প্রধান (int আরজিসি, চর ** আরজিভি){ ifstream in ("file.txt", ifstream :: in);ভেক্টর lstN নম্বর; যখন ((! in.eof ()) && ইন) { int iNumber = 0; ইন >> আই নাম্বার; lstNumbers.push_back (iNumber); } in.close (); // আপনি এই সংখ্যাগুলি দিয়ে কী করতে চান ???}

ঠিক আছে আমি মিথ্যা বলেছি - ভেক্টর শ্রেণির জন্য আমাকে সি ++ রেফারেন্স গুগল করতে হয়েছিল কারণ সত্যিই আমি কখনই এটি ব্যবহার করি না। আমি কিউটি ফ্রেমওয়ার্কের সাথে কাজ করি যার সমস্ত ডেটা স্ট্রাকচার (তালিকা, মানচিত্র, সেট ইত্যাদি) এর নিজস্ব ক্লাস রয়েছে। অতিরিক্ত হিসাবে, আমি সাধারণত ফাইল আই / ও দিয়ে কাজ করি না - আমি জাভাতে প্রাথমিকভাবে পেশাগতভাবে কাজ করি এবং এমনকি আমি সেখানে জেএসওএন এবং এক্সএমএল ফাইলের মতো ফাইলগুলি নিয়ে কাজ করি না এবং প্রোগ্রামারটির জন্য এমন লাইব্রেরি রয়েছে যেগুলি বিমূর্ত জিনিসগুলি বের করে দেয় for সুতরাং ফাইলটি খোলার, বন্ধ করা বা টুকরো টুকরো পড়ার বিষয়ে কারও চিন্তা করার দরকার নেই। আমি বিশ্বাস করি তবে আপনার পক্ষে এই কৌশলটি করা উচিত।

আমি এটি পরীক্ষা করিনি - কেবল পরিষ্কার করার জন্য - একটি পরিবর্তন আমি করতে পারি তা হ'ল চেষ্টা করে / ক্যাচ ব্লকের ভিতরে ফাইল কোডটি গুটিয়ে ফেলা হয় তবে যেহেতু সি ++ জাভা হিসাবে ব্যতিক্রম সম্পর্কে কম মলদ্বার, আমি এখানে নেই। চেষ্টা / ধরার ফলে ফাইলটি খোলার বা বন্ধ করার সময়ও সমস্যা থেকে বিরত থাকা বন্ধ হবে - যাতে কথা বলার ক্ষেত্রে ত্রুটি থাকে।


উত্তর 3:

এটার মতো কিছু.

সাধারণভাবে আমি সরাসরি কোনও ফাইল থেকে ইনট পড়ার স্টাইল পছন্দ করি না। আমি একবারে লাইন পড়ার প্রবণতা করি, তারপরে লাইনটি বিশ্লেষণ করি। আমি স্বীকার করি যে আমি সরাসরি সংখ্যা পড়ার আচরণের ক্ষেত্রে 100% নিশ্চিত নই, যেমন সংখ্যা না থাকা জিনিসগুলিতে হস্তক্ষেপ করা হলে কী হয়।

যদি না এটি প্রকল্পের অ্যারেগুলির দাবি করে তবে আমি একটি ভেক্টর ব্যবহার করব। অ্যারেগুলি আকার পরিবর্তন করে না, এবং স্থির বাফার সহ প্রোগ্রাম লিখতে ভুল হয় এবং আমি যতবার বার বার জ্বলতে ভেবেছিলাম তা সর্বাধিক আকারকে যথেষ্ট বড় করে তুলেছি (আমি তা করব না, তবে অনেক সময় ছিলাম) ।)

# অন্তর্ভুক্ত # অন্তর্ভুক্ত # অন্তর্ভুক্ত # অন্তর্ভুক্ত নেমস্পেস স্ট্যান্ড ব্যবহার করে;int প্রধান () { ifstream মাইফাইল ("d: \\ সংখ্যা.txt"); যদি (myfile.is_open ()) { int arrSize = 0;অ্যারে arr; // আদর্শভাবে এটি ভেক্টর হবে তবে আপনি অ্যারে বলেছেন যখন (সত্য) { ইন্ট এক্স; মাইফিল >> এক্স; যদি (myfile.eof ()) বিরতি; আরআর [arrSize ++] = এক্স; } (int i = 0; i কোট << আরআর [আমি] << ""; কোট << এন্ডল; // আমার এখানে ফাইলটি বন্ধ করে দেওয়া উচিত ছিল, তবে প্রোগ্রামটি শেষ হওয়ার সাথে সাথে আমি অলস was অন্য { cout << "ফাইল খুলতে অক্ষম"; } প্রত্যাবর্তন 0;}

উত্তর 4:

আপনি যদি নিশ্চিত হন যে ফাইলটিতে কেবলমাত্র আপনি পড়তে চান এমন সংখ্যা রয়েছে এবং সি থেকে প্রাপ্ত উত্তরের হিসাবে অ্যারে-জিনিসটি নির্দিষ্টভাবে উল্লেখ না করে আপনি "অ্যারে" কে একটি বিমূর্ত ধারণা হিসাবে বিবেচনা করতে যথেষ্ট বুদ্ধিমান হন, তবে এটি করতে পারে একটি ভেক্টর আরম্ভ করার জন্য মোটামুটি যুক্তিসঙ্গত হতে হবে (বা ভেক্টর) , ইত্যাদি) ফাইল থেকে এই জাতীয় কিছু:

std :: ifstream ইনপুট ("সংখ্যা.txt");std :: ভেক্টর সংখ্যাগুলি {এসটিডি :: ইসট্রিম_টিরেটর (ইনপুট), {}};

(“টি” এর জন্য = আপনি যে জাতীয় টাইপ পড়তে চান — ইন্ট, ডাবল, ফ্লোট ইত্যাদি)

যদি আপনার ফাইলটিতে সংখ্যার মধ্যে অতিরিক্ত "জাঙ্ক" থাকতে পারে তবে আপনি চাইলে সাধারণত একই জিনিসটি করতে পারেন। একটি istream_iterator মূলত একটি অ্যাডাপ্টার যা প্রবাহ থেকে আইটেমগুলি পড়তে অপারেটর >> ব্যবহার করে। এটি, পরিবর্তে, সাদা স্থান উপেক্ষা করে, তাই `1 এর মতো কিছু 2` 1 হিসাবে 2 অনুসরণ করা হবে 2।

তবে এখানে এমন একটি জায়গা যা আইওস্ট্রিমগুলি আসলে বেশ সুন্দরভাবে সজ্জিতভাবে ডিজাইন করা হয়েছে: হোস্টস্পেস কী তা iostream (নিজেই) নির্ধারণ করে না। পরিবর্তে, এটি স্ট্রিমের লোকালে এটি প্রতিনিধিত্ব করে।

আমরা যদি স্ট্রিমের অতিরিক্ত জাঙ্ক উপেক্ষা করতে চাই (যেমন, সমস্ত কিছু যে ডিজিট নয়) আমরা একটি লোকেল সংজ্ঞায়িত করতে পারি যা বলে যে সমস্ত কিছু হোয়াইটস্পেস, তবে কেবল স্ট্রিম থেকে আমাদের সংখ্যাগুলি পড়ুন।

স্ট্রাক্ট ডিজিট_অনলি: স্টাড :: সিটিপি {ডিজিট_অনলি (): স্টাড :: সিটিপি (get_table ())} স্ট্যাটিক স্টাড :: সিটিপি_বেস :: মাস্ক কনস্ট * get_table () { // প্রথমে, একটি টেবিল তৈরি করুন যা বলবে যে সবকিছু সাদা-স্থান space স্ট্যাটিক স্টাড :: ভেক্টর rc (std :: ctype) :: টেবিল_সাইজ, স্ট্যান্ড :: সিটিপি_বেস :: স্পেস); // তারপরে অঙ্কগুলি বাস্তবে অঙ্ক হিসাবে সেট করুন: যদি (আরসি ['0'] == স্টাডি :: সিটিপি_বেস :: স্পেস) এসটিডি :: ফিল_এন (& আরসি ['0'], 9, স্টাডি :: সিটিপি_বেস :: মাস্ক ()); // সেই অনুযায়ী অক্ষরগুলিকে শ্রেণিবদ্ধ করতে টেবিলটি ফিরিয়ে দিন: প্রত্যাবর্তন & আরসি [0]; }};

তারপরে আমরা স্ট্রিমটিকে এই লোকেলটি ব্যবহার করতে এবং স্ট্রিম থেকে ডেটা পড়তে বলি:

int প্রধান () { std :: istringstream ইনপুট (আর "(11 জাঙ্ক 1.00 আরও-জাঙ্ক 16.0 এখনও আরও জাঙ্ক 1.999! @ # $$% ^ $% & * শেষ হয়েছে)"); ইনপুট.আইবিউ (স্টাড :: লোকেল (এসটিডি :: লোকেল (), নতুন সংখ্যা_মাত্র));std :: ভেক্টর সংখ্যাগুলি {এসটিডি :: ইসট্রিম_টিরেটর (ইনপুট), {}};}

এবং, স্থানীয় লোকেরা যেহেতু একটি অঙ্ক ব্যতীত সমস্ত কিছুকে সাদা-স্থান বলে, তাই সংখ্যার মধ্যে থাকা সমস্ত অতিরিক্ত "স্টাফ "টিকে সাদা-স্থান হিসাবে বিবেচনা করা হবে (অর্থাত, নিঃশব্দে উপেক্ষা করা) সুতরাং আমরা কেবল সংখ্যাগুলি পাই।


উত্তর 5:

আপনি নিম্নলিখিত কোডটি দ্বারা একটি টেক্সট ফাইলে নম্বরগুলি পড়তে পারেন।

# অন্তর্ভুক্ত

# অন্তর্ভুক্ত

# অন্তর্ভুক্ত

অকার্যকর প্রধান ()

{চর চি; int a; int arr [[30]; int i = 0;

ifstream f1 ("abc.txt");

যখন (! f1.eof ())

{

ফাই >> সিএইচ;

এ = স্ট্যাটিক_কাস্ট সিএইচ;

arr [i] = a;

}

f1.close ();

getch ();

}

এই প্রোগ্রামটি একটি টেক্সট ফাইল পড়ে যা এই প্রোগ্রামের আগেই তৈরি করা হয়েছে বলে ধরে নেওয়া হয়, ফাইলটি txt ফর্ম্যাটে রয়েছে তাই আমরা একটি সংখ্যাটি চর ভেরিয়েবেলে সংরক্ষণ করব কারণ চর টাইপযুক্ত ভেরিয়েবল অক্ষর সংরক্ষণ করতে পারে এবং তারপরে আমরা স্ট্যাটিক_কাস্ট () ফাংশনটি ব্যবহার করব অক্ষরের মানটি পূর্ণসংখ্যার টাইপ করা মানের মধ্যে ফেলে দিন এবং এটি একটিতে রেখে দিন এবং তারপরে আমরা এর ভেরিয়েবলটি একে একে অ্যারেতে সংরক্ষণ করব।

ধন্যবাদ …..


উত্তর 6:

আমি কোডটি লিখব না, তবে আমি সবচেয়ে ভাল ব্যাখ্যা করব। Ifstream হেডার ব্যবহার করে আপনি আপনার ifstream অবজেক্টে EOF (ফাইলের শেষ) না পাওয়া পর্যন্ত লুপ করতে চান until লুপিংয়ের সময় পাঠ্যের প্রতিটি লাইনকে স্ট্রিং ভেরিয়েবলে পড়ুন। প্রতিটি স্ট্রিং স্পেস দ্বারা বিভক্ত অংশগুলিতে বিভক্ত (টোকেনাইজ) করুন। প্রতিটি অংশের জন্য (টোকেন), এটি পূর্ণসংখ্যায় রূপান্তর করা যায় কিনা তা পরীক্ষা করুন — যদি তা পারেন তবে এটি আপনার তালিকায় যুক্ত করুন, অন্যথায় পরের দিকে যান। সুতরাং মূলত আপনার কাছে একটি বাহ্যিক লুপ থাকবে যা পাঠ্যের রেখাগুলি এবং একটি অভ্যন্তরীণ লুপ পাবে যা পাঠ্যের প্রতিটি লাইনকে অংশে বিভক্ত করে এবং এটি থেকে একটি সংখ্যা তৈরি করার চেষ্টা করে।

একবার আপনি অভ্যন্তরীণ এবং বাইরের লুপগুলির শেষ পুনরাবৃত্তিটি থেকে জামিন পেয়ে যান, আপনার কাছে একটি তালিকা রয়েছে যা আপনি যা করতে পারেন তা করতে পারেন।


উত্তর 7:

বলুন আপনার কাছে ইনপুট.টিএসটি নামের একটি ফাইল রয়েছে, আপনি ফাইলটি থেকে পূর্ণসংখ্যা পড়তে নিম্নলিখিত কোড স্নিপেট ব্যবহার করতে পারেন। আশা করি এটা সাহায্য করবে :-)

# অন্তর্ভুক্ত নেমস্পেস স্ট্যান্ড ব্যবহার করে;কনট ইন্ট এসজেড = 1001; // অ্যারে সর্বোচ্চ আকারে sz সেট করুনint অ্যারে [sz];প্রধান প্রধান (){ ফ্রোপেন ("ইনপুট.টেক্সট", "আর", স্টিডিন); int সূচক = 0, সংখ্যা; ফাইলের শেষে / স্ক্যান করুন যখন (স্ক্যানফ ("% d", এবং সংখ্যা) == 1) { অ্যারে [সূচক ++] = সংখ্যা; } (int i = 0; i) এর জন্য প্রিন্টফ ("% d", অ্যারে [i]); প্রিন্টফ ("\ n"); প্রত্যাবর্তন 0;}

উত্তর 8:

আপনি কীভাবে প্রোগ্রাম করবেন তা শিখতে পছন্দ করতে পারেন ...

সুতরাং পাঠ্য ফাইলে অঙ্ক রয়েছে (এএসসিআইআই 48..57, সম্ভবত 'ই' এবং '-' এবং '।') এবং বিভাজক (এএসসিআইআই 13,10,9,32, আপনার বিষ যাই হোক না কেন)।

সুতরাং আপনি যে পরিমাণ অ্যারে লম্বা ইনট, লং ইনট বরাদ্দ করেন এবং পরবর্তী বিভাজক পর্যন্ত স্ট্রিং দ্বারা বাইট বা স্ট্রিং দ্বারা ফাইলটি বাইট করার সময় এটি পপুলেট করতে শুরু করেন।

তুমি জানো আমার বেতন কেন বেশি? কারণ আমি নিজে থেকে এটি করেছি, অনেক সময় বিনিয়োগ করেছি এবং নিয়োগকর্তারা এটি জানেন।


উত্তর 9:

আপনাকে ইন্টারনেটে এমন একটি ইউটিলিটি সন্ধান করতে হবে যা আপনার পাঠ্য ফাইলটিকে সি-অ্যারে রূপান্তর করবে। যদি আপনার পাঠ্য ফাইলটি সিএসভি ফর্ম্যাট (কমা দ্বারা পৃথক করা মান) লেখা থাকে তবে আমি মনে করি যে এই জাতীয় ইউটিলিটিটি খুঁজে পেতে আপনার কোনও সমস্যা হবে না। অন্য কথায়, আপনার পাঠ্য ফাইলটি অবশ্যই একটি জ্ঞাত মানের সাথে সামঞ্জস্য করা উচিত, এক্ষেত্রে আপনি সহজেই এটি সি-অ্যারে রূপান্তর করতে পারবেন।


উত্তর 10:

ক্লাসিকাল সি উপায় fscanf ব্যবহার করা হবে

স্ট্রিম স্ট্রিমের সাথে একসাথে আইফ্রিম ব্যবহার করা একটি সি ++ উপায়।

আপনার এমনকি স্ট্রিং স্ট্রিমের দরকারও পড়বে না।