C++ Seekg() فنکشن

C Seekg Fnkshn



C++ پروگرامنگ میں، seekg() فنکشن فائل اسٹریمز میں مدد فراہم کرتا ہے۔ یہ iostream لائبریری کا رکن ہے اور آپ اسے ہیڈر میں تلاش کریں گے۔ یہ فنکشن پروگرامرز کو ہیرا پھیری کرنے کی اجازت دیتا ہے جہاں اگلا ان پٹ آپریشن شروع ہوتا ہے، اس طرح فائلوں کے ساتھ کام کرنے کے عمل کو ہموار کرتا ہے۔ seekg() طریقہ آپ کو فائل میں ایک مخصوص مقام پر جانے دیتا ہے جو کہ انمول ہوتا ہے جب آپ کو اس ڈیٹا کو پڑھنے یا اس پر کارروائی کرنے کی ضرورت ہوتی ہے جو ترتیب وار ترتیب سے نہ ہو۔ چاہے آپ کا مقصد کسی فائل کے شروع، درمیان یا آخر سے پڑھنا ہے، seekg() وہ لچک فراہم کرتا ہے جو اس طرح کے کاموں کے لیے درکار ہے۔ اس گائیڈ کے دوران، ہم اس بات کا جائزہ لیں گے کہ کس طرح C++ میں seekg() فنکشنز فائل کے اندر مختلف پوائنٹس سے ڈیٹا کی بازیافت کو قابل بناتے ہیں۔

C++ میں Seekg() فنکشن کے نحو اور پیرامیٹرز

Seekg() کو دو نحو کے ساتھ لاگو کیا جا سکتا ہے:

1. Streampos Syntax

ندی اور تلاش کرنا ( streampos پوسٹ ) ;

یہ نحو صرف ایک پیرامیٹر، پوزیشن لیتا ہے، جو اسٹریم بفر میں کرسر کی پوزیشن کو ظاہر کرتا ہے۔ یہ ایک 'int' قدر اور قسم کی streampos کی نمائندگی کرتا ہے۔







2. آفسیٹ اور ڈائریکشن سنٹیکس

ندی اور تلاش کرنا ( اکثر بند ، ios_base :: تلاش ہے گندگی ) ;

یہ نحو ان پٹ کے طور پر دو پیرامیٹرز لیتا ہے: آفسیٹ اور سمت۔ 'ofst' پیرامیٹر قسم streamoff کا ایک عدد ہے جو سٹریم کے بفر میں آفسیٹ کی نشاندہی کرتا ہے۔ 'گندگی' پیرامیٹر سمت تلاش کرتا ہے۔



  • ios_base::beg: سٹریم کے بفر کے آغاز سے ہی آفسیٹ۔
  • ios_base::cur: سٹریم کے بفر میں موجودہ پوزیشن سے آفسیٹ۔
  • ios_base::end: سلسلہ کے آخری بفر سے آفسیٹ۔

C++ میں seekg() فنکشن فائل پوائنٹر میں ہیرا پھیری کرتا ہے، پروگرامر کو اس قابل بناتا ہے کہ وہ اسے فائل کے اندر مخصوص جگہ پر رکھ سکے۔ یہ 'istream' آبجیکٹ (*یہ) کی ترمیم واپس کرتا ہے اور اس کے مطابق فائل پوائنٹر کو ایڈجسٹ کرتا ہے۔



C++ Seekg() فنکشن میں خرابی اور استثنیٰ ہینڈلنگ

C++ میں seekg() فنکشن استثناء سے نمٹنے کے لیے بنیادی ضمانت کو یقینی بناتا ہے، اگر کوئی استثنا آتا ہے تو آبجیکٹ کی درستگی کو برقرار رکھتا ہے۔ یہ 'ناکامی' مستثنیات کو پھینک سکتا ہے جب ایرر اسٹیٹ فلیگ میں معلومات کی کمی ہوتی ہے، اور فنکشن ذمہ داری کے ساتھ ان استثنیات کو پکڑتا ہے اور ان کا نظم کرتا ہے، اگر آخری کال میں کوئی برا سا سیٹ کیا گیا تھا تو انہیں دوبارہ پھینک دیتا ہے۔





مزید برآں، seekg() کے ساتھ ایک عام مسئلہ اس وقت ہوتا ہے جب یہ فائل کے اختتام (EOF) تک پہنچ جاتا ہے، جس کی وجہ سے پوائنٹر غیر سیٹ رہتا ہے اور غلطی کو متحرک کرتا ہے۔ واضح() طریقہ پوائنٹر کو دوبارہ ترتیب دینے اور EOF سے متعلقہ غلطیوں کو دور کرنے کے لیے استعمال کیا جاتا ہے۔ مزید برآں، seekg() ملٹی تھریڈڈ ماحول میں اسٹریم آبجیکٹ کو تبدیل کرنے کا خطرہ لاحق ہو سکتا ہے، احتیاط کی ضرورت ہے اور ممکنہ 'آف اسٹریم' آبجیکٹ کی تبدیلیوں کو کم کرنے کے لیے ہم آہنگی کے طریقہ کار کے نفاذ کی ضرورت ہے۔

مثال 1: تلاش کی بنیادی باتیں ()

پہلی مثال میں، ہم C++ میں seekg() فنکشن کی بنیادی باتوں کی وضاحت کریں گے۔ C++ پروگرام کا کوڈ درج ذیل میں دیا گیا ہے۔ پہلے اس پر ایک نظر ڈالیں اور پھر ہم کوڈ کے ہر حصے کی وضاحت کی طرف بڑھیں گے۔



#include

# شامل کریں

نام کی جگہ کا استعمال کرتے ہوئے std ;

int مرکزی ( int argc ، چار ** argv ) {

ایف اسٹریم ایس جی فائل ( 'seekgFile.txt' ، ios :: میں | ios :: باہر | ios :: ٹرنک ) ;

ایس جی فائل << 'seekg() فنکشن' ;

ایس جی فائل۔ تلاش کرنا ( 8 ، ios :: بھیک مانگنا ) ;

چار sgArray [ 8 ] ;

ایس جی فائل۔ پڑھیں ( sgArray ، 8 ) ;

sgArray [ 8 ] = 0 ;

cout << sgArray << endl ;

ایس جی فائل۔ بند کریں ( ) ;

}

پروگرام میں دو ضروری ہیڈر فائلیں شامل ہیں - اور - فائل ہینڈلنگ اور ان پٹ/آؤٹ پٹ آپریشنز کے لیے، بالترتیب۔ اس کے بعد، 'نیم اسپیس 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); - seekg() فنکشن کا استعمال گیٹ پوائنٹر کو فائل کے شروع (ios::beg) سے 8ویں پوزیشن پر سیٹ کرنے کے لیے کیا جاتا ہے۔

sgFile.read(sgArray، 8)؛ - 'پڑھیں' فنکشن کو گیٹ پوائنٹر کی موجودہ پوزیشن سے 'sgArray' میں آٹھ حروف کو پڑھنے کے لیے استعمال کیا جاتا ہے۔

sgArray [8] = 0؛ - مناسب سٹرنگ ہینڈلنگ کو یقینی بنانے کے لیے Null کردار کی صف کو ختم کرتا ہے۔

cout << sgArray << endl; - 'sgArray' کا مواد (فائل سے پڑھے جانے والے 8 حروف) cout کا استعمال کرتے ہوئے کنسول پر ظاہر ہوتا ہے۔

sgFile.close(); - Close() فنکشن فائل اسٹریم کو بند کرنے کے لیے استعمال ہوتا ہے۔

اس پروگرام کا آؤٹ پٹ 'فنکشن' ہونے کی توقع ہے۔ آئیے اسے درج ذیل آؤٹ پٹ اسنیپٹ میں چیک کرتے ہیں:

کوڈ ایک فائل سٹریم بناتا ہے جو 'seekgFile.txt' فائل سے منسلک ہوتا ہے، فائل پر ایک تار لکھتا ہے، شروع سے 8ویں پوزیشن حاصل کرتا ہے، آٹھ حروف کو پڑھتا ہے، اور پڑھے ہوئے مواد کو آؤٹ پٹ کرتا ہے۔ آخر میں، فائل کا سلسلہ بند ہو گیا ہے.

مثال 2: متحرک نیویگیشن

ایک ایسے منظر نامے پر غور کریں جہاں آپ کو متحرک طور پر seekg() آفسیٹ کا حساب لگانا ہوگا۔ آئیے سمجھتے ہیں کہ کوڈ کی مثال کی مدد سے آف سیٹ کو متحرک طور پر کیسے حساب کیا جائے۔

# شامل کریں

#include

نام کی جگہ کا استعمال کرتے ہوئے std ;

int مرکزی ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

int آفسیٹ = 8 ;

ایس جی فائل۔ تلاش کرنا ( آفسیٹ ، ios :: ڈال ) ;

چار بفر [ 8 ] ;

ایس جی فائل۔ پڑھیں ( بفر ، 8 ) ;

cout << 'مواد:' << بفر << endl ;

ایس جی فائل۔ بند کریں ( ) ;

واپسی 0 ;

}

جیسا کہ آپ دیکھ سکتے ہیں، ہم اسی فائل سے مواد پڑھ رہے ہیں جسے ہم نے پچھلی مثال، 'seekgFile.txt' میں بنایا تھا۔ seekg() فنکشن گیٹ پوائنٹر کو فائل میں موجودہ پوزیشن (ios::cur) پر سیٹ کرتا ہے، اور اسے حساب شدہ آفسیٹ (8 حروف) کے ذریعے منتقل کیا جاتا ہے۔ read() فنکشن گیٹ پوائنٹر کی موجودہ پوزیشن سے بفر میں آٹھ حروف کو پڑھتا ہے۔

'seekg() فنکشن' فائل کے مواد اور آٹھ حروف کے آفسیٹ کو دیکھتے ہوئے، پروگرام فائل کے 9ویں کریکٹر سے شروع ہونے والی سبسٹرنگ کو آؤٹ پٹ کرے گا۔ لہذا، پروگرام کا متوقع نتیجہ 'فنکشن' ہے۔ آئیے درج ذیل آؤٹ پٹ میں اس کی تصدیق کریں:

یہ مثال متحرک طور پر آف سیٹ کا حساب لگا کر seekg() کی لچک کو ظاہر کرتی ہے۔

مثال 3: اختتام سے نیویگیٹ کرنا

اس مثال میں، ہم یہ ظاہر کریں گے کہ فائل کے آخر سے فائل میں ڈیٹا کو کیسے پڑھا جائے۔ یہاں، seekg() کو فائل کے آخر سے نیویگیٹ کرنے کے لیے استعمال کیا جاتا ہے۔ منفی آفسیٹ ایک ایسی پوزیشن کی نشاندہی کرتا ہے جو اختتام سے متعلق ہے۔ درج ذیل کوڈ کو دیکھیں:

# شامل کریں

#include

نام کی جگہ کا استعمال کرتے ہوئے std ;

int مرکزی ( ) {

ifstream sgFile ( 'seekgFile.txt' ) ;

ایس جی فائل۔ تلاش کرنا ( - 4 ، ios :: اختتام ) ;

چار بفر [ 8 ] ;

ایس جی فائل۔ پڑھیں ( بفر ، 8 ) ;

cout << 'مواد:' << بفر << endl ;

ایس جی فائل۔ بند کریں ( ) ;

واپسی 0 ;

}

یہ C++ پروگرام 'seekgFile.txt' نامی فائل کھولتا ہے جو sgFile.seekg(-4, ios::end) کا استعمال کرتے ہوئے فائل کے آخر سے چار حروف کے گیٹ پوائنٹر کو پیچھے کی طرف لے جاتا ہے، اس پوزیشن سے اگلے آٹھ حروف کو پڑھتا ہے۔ ایک بفر، اور پھر بفر کے مواد کو کنسول پر پرنٹ کرتا ہے۔ فائل کے مواد کو 'seekg() فنکشن کے طور پر دیکھتے ہوئے، متوقع آؤٹ پٹ 'ction' ہے۔ آئیے درج ذیل آؤٹ پٹ کے اسکرین شاٹ میں آؤٹ پٹ کو میچ کرتے ہیں:

نتیجہ

خلاصہ طور پر، seekg() فائل اسٹریمز کو درستگی کے ساتھ نیویگیٹ کرنے کے لیے ایک قیمتی اثاثہ بن کر ابھرتا ہے۔ صوابدیدی پوزیشنوں کو تلاش کرنے، آف سیٹس کو متحرک طور پر شمار کرنے، اور فائل کے اندر مختلف پوائنٹس سے نیویگیٹ کرنے کی صلاحیت کے ذریعے، seekg() ڈویلپرز کو فائل آپریشنز کو موثر طریقے سے ہینڈل کرنے کا اختیار دیتا ہے۔ جیسا کہ ہم نے مثالوں میں دیکھا ہے، C++ میں فائل اسٹریمز کے ساتھ کام کرتے وقت سیکگ() میں مہارت حاصل کرنا آپ کے کنٹرول اور لچک کو بڑھاتا ہے۔ تاہم، یہ C++ میں مضبوط اور غلطی سے پاک فائل آپریشنز کو یقینی بنانے کے لیے مستثنیٰ ہینڈلنگ اور ڈیٹا کی دوڑ کے ممکنہ منظرناموں پر احتیاط سے غور کرنے کا مطالبہ کرتا ہے۔