C++ Seekg() ফাংশন

C Seekg Phansana



C++ প্রোগ্রামিং-এ, seekg() ফাংশন ফাইল স্ট্রীমের মধ্যে সাহায্য প্রদান করে। এটি iostream লাইব্রেরির সদস্য এবং আপনি এটি হেডারে পাবেন। এই ফাংশনটি প্রোগ্রামারদেরকে ম্যানিপুলেট করার অনুমতি দেয় যেখানে পরবর্তী ইনপুট অপারেশন শুরু হয়, যার ফলে ফাইলগুলির সাথে কাজের প্রক্রিয়াটি সুগম হয়। seekg() পদ্ধতিটি আপনাকে একটি ফাইলের একটি নির্দিষ্ট স্থানে যেতে দেয় যা অমূল্য যখন আপনাকে ক্রমানুসারে সংগঠিত নয় এমন ডেটা পড়তে বা প্রক্রিয়া করতে হয়। আপনি একটি ফাইলের শুরু থেকে, মাঝখানে বা শেষ থেকে পড়ার লক্ষ্য রাখুন না কেন, seekg() এই ধরনের কাজের জন্য প্রয়োজনীয় নমনীয়তা প্রদান করে। এই নির্দেশিকা জুড়ে, আমরা অনুসন্ধান করব কিভাবে C++-এ seekg() ফাংশন একটি ফাইলের বিভিন্ন পয়েন্ট থেকে ডেটা পুনরুদ্ধার সক্ষম করে।

C++ এ Seekg() ফাংশনের সিনট্যাক্স এবং প্যারামিটার

Seekg() দুটি সিনট্যাক্সের সাথে প্রয়োগ করা যেতে পারে:

1. স্ট্রিমপোস সিনট্যাক্স

প্রবাহ এবং সন্ধান ( স্ট্রিমপোস পোস্ট ) ;

এই সিনট্যাক্সটি শুধুমাত্র একটি প্যারামিটার, অবস্থান নেয়, যা স্ট্রিম বাফারে কার্সারের অবস্থানকে প্রতিনিধিত্ব করে। এটি একটি 'int' মান এবং টাইপের স্ট্রিমপোস উপস্থাপন করে।







2. অফসেট এবং দিকনির্দেশ সিনট্যাক্স

প্রবাহ এবং সন্ধান ( প্রবাহ বন্ধ , ios_base :: সন্ধান করা হয় ময়লা ) ;

এই সিনট্যাক্স ইনপুট হিসাবে দুটি প্যারামিটার নেয়: অফসেট এবং দিক। 'ofst' প্যারামিটার হল স্ট্রিমঅফের একটি পূর্ণসংখ্যা যা স্ট্রিমের বাফারে অফসেট নির্দেশ করে। 'ময়লা' পরামিতি দিক নির্দেশনা চায়।



  • ios_base::beg: স্ট্রিমের বাফারের একেবারে শুরু থেকে অফসেট।
  • ios_base::cur: স্ট্রিমের বাফারে বর্তমান অবস্থান থেকে অফসেট।
  • ios_base::end: স্ট্রিমের বাফারের শেষ থেকে অফসেট।

C++-এ seekg() ফাংশন ফাইল পয়েন্টারকে ম্যানিপুলেট করে, প্রোগ্রামারকে ফাইলের মধ্যে একটি নির্দিষ্ট স্থানে এটি স্থাপন করতে সক্ষম করে। এটি 'istream' অবজেক্টের পরিবর্তন (*এটি) ফেরত দেয় এবং সেই অনুযায়ী ফাইল পয়েন্টারকে সামঞ্জস্য করে।



C++ Seekg() ফাংশনে ত্রুটি এবং ব্যতিক্রম হ্যান্ডলিং

C++-এ seekg() ফাংশন ব্যতিক্রম হ্যান্ডলিংয়ের জন্য মৌলিক গ্যারান্টি নিশ্চিত করে, ব্যতিক্রম ঘটলে অবজেক্টের বৈধতা বজায় রাখে। এটি 'ব্যর্থতা' ব্যতিক্রমগুলি ফেলে দিতে পারে যখন ত্রুটি রাজ্যের পতাকায় তথ্যের অভাব থাকে এবং ফাংশনটি দায়িত্বের সাথে এই ব্যতিক্রমগুলিকে ধরে এবং পরিচালনা করে, যদি শেষ কলে একটি খারাপ বিট সেট করা হয় তবে সেগুলিকে পুনরায় থ্রো করে।





অধিকন্তু, seekg() এর সাথে একটি সাধারণ সমস্যা দেখা দেয় যখন এটি ফাইলের এন্ড-অফ-এ (EOF) পৌঁছায়, যার ফলে পয়েন্টারটি আনসেট থাকে এবং একটি ত্রুটি ট্রিগার করে। ক্লিয়ার() পদ্ধতিটি পয়েন্টার রিসেট করতে এবং ইওএফ-সম্পর্কিত ত্রুটিগুলি সমাধান করতে ব্যবহার করা হয়। অতিরিক্তভাবে, seekg() একটি মাল্টিথ্রেডেড পরিবেশে একটি স্ট্রীম অবজেক্ট পরিবর্তন করার ঝুঁকি নিতে পারে, সতর্কতা প্রয়োজন এবং সম্ভাব্য 'অফস্ট্রিম' অবজেক্টের পরিবর্তনগুলি প্রশমিত করার জন্য সিঙ্ক্রোনাইজেশন মেকানিজম বাস্তবায়ন করতে পারে।

উদাহরণ 1: অনুসন্ধানের মূল বিষয়গুলি()

প্রথম উদাহরণে, আমরা C++ এ seekg() ফাংশনের মূল বিষয়গুলি ব্যাখ্যা করব। একটি C++ প্রোগ্রামের কোড নিচে দেওয়া আছে। প্রথমে এটি দেখুন এবং তারপরে আমরা কোডের প্রতিটি বিভাগের ব্যাখ্যায় চলে যাব।



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

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

নামস্থান std ব্যবহার করে ;

int প্রধান ( int argc , চর ** argv ) {

fstream sgFile ( 'seekgFile.txt' , আইওএস :: ভিতরে | আইওএস :: আউট | আইওএস :: ট্রাঙ্ক ) ;

sgফাইল << 'seekg() ফাংশন' ;

sgফাইল। সন্ধান ( 8 , আইওএস :: ভিক্ষা করা ) ;

চর sgArray [ 8 ] ;

sgফাইল। পড়া ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

sgফাইল। বন্ধ ( ) ;

}

প্রোগ্রামটিতে যথাক্রমে ফাইল হ্যান্ডলিং এবং ইনপুট/আউটপুট অপারেশনের জন্য দুটি প্রয়োজনীয় হেডার ফাইল রয়েছে - এবং । এর পরে, 'নামস্পেস std ব্যবহার করে;' বিবৃতিটি অন্তর্ভুক্ত করা হয়েছে, যা স্পষ্টভাবে নেমস্পেস উল্লেখ না করেই স্ট্যান্ডার্ড C++ শনাক্তকারীকে অনুমতি দেয়। অবশেষে, প্রধান ফাংশন শুরু হয়, যা প্রোগ্রামের এন্ট্রি পয়েন্ট, কমান্ড-লাইন আর্গুমেন্ট (argc এবং argv) গ্রহণ করে।

fstream sgFile(“seekgFile.txt”, ios::in | ios::out | ios::trunk); - এখানে, 'sgFile', 'fstream' ক্লাসের একটি অবজেক্ট তৈরি করা হয়েছে, যা একটি ফাইল স্ট্রিমকে উপস্থাপন করে। “seekgFile.txt” নামের ফাইলটি ফাইল স্ট্রিমের সাথে যুক্ত। ফাইল স্ট্রীম ইনপুট (ios::in) আউটপুট (ios::out) জন্য খোলা হয়। ফাইলটি বিদ্যমান থাকলে, এর বিষয়বস্তু ছেঁটে ফেলা হয় (ios::trunc)।

sgFile << “seekg() ফাংশন”; – “seekg() ফাংশন” স্ট্রিং “<<” অপারেটর ব্যবহার করে ফাইলে লেখা হয়।

sgFile.seekg(8, ios::beg); - Seeg() ফাংশনটি ফাইলের শুরু থেকে (ios::beg) 8ম অবস্থানে গেট পয়েন্টার সেট করতে ব্যবহৃত হয়।

sgFile.read(sgArray, 8); - 'রিড' ফাংশনটি গেট পয়েন্টারের বর্তমান অবস্থান থেকে 'sgArray'-এ আটটি অক্ষর পড়ার জন্য নিযুক্ত করা হয়।

sgArray[8] = 0; - একটি সঠিক স্ট্রিং হ্যান্ডলিং নিশ্চিত করতে নাল অক্ষর অ্যারে বন্ধ করে দেয়।

cout << sgArray << endl; - 'sgArray' এর বিষয়বস্তু (ফাইল থেকে পড়া 8টি অক্ষর) cout ব্যবহার করে কনসোলে প্রদর্শিত হয়।

sgFile.close(); - Close() ফাংশনটি ফাইল স্ট্রিম বন্ধ করতে ব্যবহৃত হয়।

এই প্রোগ্রামের আউটপুট 'ফাংশন' হবে বলে আশা করা হচ্ছে। আসুন আমরা নিম্নলিখিত আউটপুট স্নিপেটে এটি পরীক্ষা করি:

কোডটি একটি ফাইল স্ট্রীম তৈরি করে যা “seekgFile.txt” ফাইলের সাথে যুক্ত ফাইলটিতে একটি স্ট্রিং লেখে, শুরু থেকে 8ম অবস্থান চায়, আটটি অক্ষর পড়ে এবং পঠিত বিষয়বস্তু আউটপুট করে। অবশেষে, ফাইল স্ট্রিম বন্ধ করা হয়.

উদাহরণ 2: গতিশীল নেভিগেশন

একটি দৃশ্যকল্প বিবেচনা করুন যেখানে আপনাকে গতিশীলভাবে seekg() অফসেট গণনা করতে হবে। আসুন কোড উদাহরণের সাহায্যে কীভাবে গতিশীলভাবে অফসেট গণনা করা যায় তা বোঝা যাক।

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

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

নামস্থান std ব্যবহার করে ;

int প্রধান ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int অফসেট = 8 ;

sgফাইল। সন্ধান ( অফসেট , আইওএস :: রাখা ) ;

চর বাফার [ 8 ] ;

sgফাইল। পড়া ( বাফার , 8 ) ;

cout << 'বিষয়বস্তু:' << বাফার << endl ;

sgফাইল। বন্ধ ( ) ;

ফিরে 0 ;

}

আপনি দেখতে পাচ্ছেন, আমরা একই ফাইল থেকে বিষয়বস্তু পড়ছি যা আমরা আগের উদাহরণে তৈরি করেছি, “seekgFile.txt”। seekg() ফাংশন ফাইলের বর্তমান অবস্থানে (ios::cur) গেট পয়েন্টার সেট করে এবং এটি গণনাকৃত অফসেট (8 অক্ষর) দ্বারা সরানো হয়। read() ফাংশনটি বাফারে গেট পয়েন্টারের বর্তমান অবস্থান থেকে আটটি অক্ষর পড়ে।

“seekg() ফাংশন” ফাইলের বিষয়বস্তু এবং আটটি অক্ষরের অফসেট দেওয়া হলে, প্রোগ্রামটি ফাইলের 9ম অক্ষর থেকে শুরু হওয়া সাবস্ট্রিংটি আউটপুট করবে। অতএব, প্রোগ্রামের প্রত্যাশিত ফলাফল হল 'ফাংশন'। আসুন আমরা নিম্নলিখিত প্রদত্ত আউটপুটে এটি নিশ্চিত করি:

এই উদাহরণটি গতিশীলভাবে অফসেট গণনা করে seekg() এর নমনীয়তা প্রদর্শন করে।

উদাহরণ 3: শেষ থেকে নেভিগেট করা

এই উদাহরণে, আমরা প্রদর্শন করব কিভাবে ফাইলের শেষ থেকে একটি ফাইলের ডেটা পড়তে হয়। এখানে, seekg() ফাইলের শেষ থেকে নেভিগেট করতে ব্যবহৃত হয়। নেতিবাচক অফসেট এমন একটি অবস্থান নির্দেশ করে যা শেষের সাথে সম্পর্কিত। নিম্নলিখিত প্রদত্ত কোড দেখুন:

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

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

নামস্থান std ব্যবহার করে ;

int প্রধান ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

sgফাইল। সন্ধান ( - 4 , আইওএস :: শেষ ) ;

চর বাফার [ 8 ] ;

sgফাইল। পড়া ( বাফার , 8 ) ;

cout << 'বিষয়বস্তু:' << বাফার << endl ;

sgফাইল। বন্ধ ( ) ;

ফিরে 0 ;

}

এই C++ প্রোগ্রামটি “seekgFile.txt” নামে একটি ফাইল খোলে যা sgFile.seekg(-4, ios::end) ব্যবহার করে ফাইলের শেষ থেকে চারটি অক্ষরের গেট পয়েন্টারকে পিছনের দিকে নিয়ে যায়, সেই অবস্থান থেকে পরবর্তী আটটি অক্ষরকে পড়তে দেয়। একটি বাফার, এবং তারপর কনসোলে বাফারের বিষয়বস্তু প্রিন্ট করে। ফাইলের বিষয়বস্তুকে 'seekg() ফাংশন' হিসাবে দেওয়া, প্রত্যাশিত আউটপুট হল 'ction'। নিচের আউটপুটের স্ক্রিনশটে আউটপুট মিলানো যাক:

উপসংহার

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