सी++ सीकेजी() फ़ंक्शन

Si Sikeji Fanksana



C++ प्रोग्रामिंग में, Seeg() फ़ंक्शन फ़ाइल स्ट्रीम के भीतर सहायता प्रदान करता है। यह iostream लाइब्रेरी का सदस्य है और आप इसे हेडर में पाएंगे। यह फ़ंक्शन प्रोग्रामर को यह हेरफेर करने की अनुमति देता है कि अगला इनपुट ऑपरेशन कहां से शुरू होता है, जिससे फ़ाइलों के साथ काम करने की प्रक्रिया सुव्यवस्थित हो जाती है। सीकग () विधि आपको फ़ाइल में एक विशिष्ट स्थान पर जाने की सुविधा देती है जो तब अमूल्य है जब आपको उस डेटा को पढ़ने या संसाधित करने की आवश्यकता होती है जो क्रमिक रूप से व्यवस्थित नहीं है। चाहे आपका लक्ष्य किसी फ़ाइल की शुरुआत, मध्य या अंत से पढ़ना हो, Seekg() ऐसे कार्यों के लिए आवश्यक लचीलापन प्रदान करता है। इस पूरे गाइड में, हम इस बात पर गहराई से चर्चा करेंगे कि C++ में Seekg() फ़ंक्शन किसी फ़ाइल के भीतर विभिन्न बिंदुओं से डेटा पुनर्प्राप्ति को कैसे सक्षम बनाता है।

C++ में Seekg() फ़ंक्शन का सिंटैक्स और पैरामीटर

Seekg() को दो सिंटैक्स के साथ कार्यान्वित किया जा सकता है:

1. स्ट्रीमपोस सिंटैक्स

धारा & तलाश ( स्ट्रीमपोस पोस्ट ) ;

यह सिंटैक्स केवल एक पैरामीटर, स्थिति लेता है, जो स्ट्रीम बफर में कर्सर की स्थिति का प्रतिनिधित्व करता है। यह एक 'int' मान और स्ट्रीमपोस प्रकार का प्रतिनिधित्व करता है।







2. ऑफसेट और डायरेक्शन सिंटैक्स

धारा & तलाश ( बार-बार स्ट्रीम करें , ios_base :: तलाश है गंध ) ;

यह सिंटैक्स इनपुट के रूप में दो पैरामीटर लेता है: ऑफसेट और दिशा। 'ऑफ़स्ट' पैरामीटर स्ट्रीमऑफ़ प्रकार का एक पूर्णांक है जो स्ट्रीम के बफ़र में ऑफ़सेट को इंगित करता है। 'गंदगी' पैरामीटर दिशा चाहता है।



  • ios_base::beg: स्ट्रीम के बफ़र की शुरुआत से ही ऑफसेट।
  • ios_base::cur: स्ट्रीम के बफ़र में वर्तमान स्थिति से ऑफ़सेट।
  • ios_base::end: स्ट्रीम के अंतिम बफ़र से ऑफसेट।

C++ में Seekg() फ़ंक्शन फ़ाइल पॉइंटर में हेरफेर करता है, जिससे प्रोग्रामर इसे फ़ाइल के भीतर एक विशिष्ट स्थान पर रखने में सक्षम होता है। यह 'आईस्ट्रीम' ऑब्जेक्ट (*यह) का संशोधन लौटाता है और तदनुसार फ़ाइल पॉइंटर को समायोजित करता है।



C++ Seekg() फ़ंक्शन में त्रुटि और अपवाद प्रबंधन

C++ में Seeg() फ़ंक्शन अपवाद प्रबंधन के लिए बुनियादी गारंटी सुनिश्चित करता है, यदि कोई अपवाद होता है तो ऑब्जेक्ट की वैधता बनाए रखता है। जब त्रुटि स्थिति ध्वज में जानकारी का अभाव होता है, तो यह 'विफलता' अपवादों को फेंक सकता है, और फ़ंक्शन जिम्मेदारी से इन अपवादों को पकड़ता है और प्रबंधित करता है, यदि अंतिम कॉल में खराब बिट सेट किया गया था तो उन्हें पुनर्स्थापित करता है।





इसके अलावा, सीकग() के साथ एक सामान्य समस्या तब होती है जब यह फ़ाइल के अंत (ईओएफ) तक पहुंच जाती है, जिससे पॉइंटर अनसेट रहता है और एक त्रुटि उत्पन्न होती है। पॉइंटर को रीसेट करने और इसे संबोधित करने के लिए ईओएफ-संबंधित त्रुटियों को हल करने के लिए क्लियर() विधि का उपयोग किया जाता है। इसके अतिरिक्त, सीकजी() मल्टीथ्रेडेड वातावरण में एक स्ट्रीम ऑब्जेक्ट को बदलने का जोखिम उठा सकता है, जिससे संभावित 'ऑफस्ट्रीम' ऑब्जेक्ट परिवर्तनों को कम करने के लिए सावधानी और सिंक्रोनाइज़ेशन तंत्र के कार्यान्वयन की आवश्यकता होती है।

उदाहरण 1: सीकेजी की मूल बातें ()

पहले उदाहरण में, हम C++ में Seekg() फ़ंक्शन की मूल बातें समझाएंगे। C++ प्रोग्राम का कोड निम्नलिखित में दिया गया है। पहले इस पर एक नज़र डालें और फिर हम कोड के प्रत्येक अनुभाग की व्याख्या पर आगे बढ़ेंगे।



#शामिल

#शामिल करें

नेमस्पेस एसटीडी का उपयोग करना ;

int यहाँ मुख्य ( int यहाँ argc , चार ** argv ) {

एफस्ट्रीम एसजीफ़ाइल ( 'सीकफ़ाइल.txt' , आईओएस :: में | आईओएस :: बाहर | आईओएस :: तना ) ;

sgफ़ाइल << 'सीकेजी () फ़ंक्शन' ;

sgफ़ाइल. तलाश ( 8 , आईओएस :: निवेदन करना ) ;

चार sgArray [ 8 ] ;

sgफ़ाइल. पढ़ना ( sgArray , 8 ) ;

sgArray [ 8 ] = 0 ;

अदालत << sgArray << अंतः ;

sgफ़ाइल. बंद करना ( ) ;

}

प्रोग्राम में क्रमशः फ़ाइल प्रबंधन और इनपुट/आउटपुट संचालन के लिए दो आवश्यक हेडर फ़ाइलें - और शामिल हैं। बाद में, 'नेमस्पेस एसटीडी का उपयोग करना;' कथन शामिल है, जो नामस्थान को स्पष्ट रूप से निर्दिष्ट किए बिना मानक C++ पहचानकर्ताओं की अनुमति देता है। अंत में, मुख्य फ़ंक्शन शुरू होता है, जो प्रोग्राम का प्रवेश बिंदु है, जो कमांड-लाइन तर्क (argc और argv) लेता है।

एफस्ट्रीम एसजीफ़ाइल ('सीकेजीफ़ाइल.txt', आईओएस::इन | आईओएस::आउट | आईओएस::ट्रंक); - यहां, 'sgFile', 'fstream' वर्ग का एक ऑब्जेक्ट बनाया गया है, जो एक फ़ाइल स्ट्रीम का प्रतिनिधित्व करता है। 'SekgFile.txt' नाम की फ़ाइल फ़ाइल स्ट्रीम से संबद्ध है। फ़ाइल स्ट्रीम इनपुट (ios::in) आउटपुट (ios::out) के लिए खोली गई है। यदि फ़ाइल मौजूद है, तो इसकी सामग्री को छोटा कर दिया जाता है (ios::trunc)।

sgफ़ाइल << 'सीकेजी() फ़ंक्शन'; - 'सीकेजी() फ़ंक्शन' स्ट्रिंग को '<<' ऑपरेटर का उपयोग करके फ़ाइल में लिखा जाता है।

sgFile.seekg(8, ios::beg); – सीकग() फ़ंक्शन का उपयोग फ़ाइल की शुरुआत (ios::beg) से 8वें स्थान पर गेट पॉइंटर सेट करने के लिए किया जाता है।

sgFile.read(sgArray, 8); – 'रीड' फ़ंक्शन का उपयोग गेट पॉइंटर की वर्तमान स्थिति से आठ अक्षरों को 'sgArray' में पढ़ने के लिए किया जाता है।

sgArray[8] = 0; – उचित स्ट्रिंग हैंडलिंग सुनिश्चित करने के लिए नल वर्ण सरणी को समाप्त कर देता है।

cout << sgArray << एंडल; – 'sgArray' की सामग्री (फ़ाइल से पढ़े गए 8 अक्षर) को कॉउट का उपयोग करके कंसोल पर प्रदर्शित किया जाता है।

sgFile.close(); – फ़ाइल स्ट्रीम को बंद करने के लिए क्लोज़() फ़ंक्शन का उपयोग किया जाता है।

इस प्रोग्राम का आउटपुट 'फ़ंक्शन' होने की उम्मीद है। आइए इसे निम्नलिखित आउटपुट स्निपेट में जांचें:

कोड एक फ़ाइल स्ट्रीम बनाता है जो 'sekgFile.txt' फ़ाइल से जुड़ा होता है, फ़ाइल में एक स्ट्रिंग लिखता है, शुरुआत से 8वीं स्थिति की तलाश करता है, आठ अक्षर पढ़ता है, और पढ़ी गई सामग्री को आउटपुट करता है। अंत में, फ़ाइल स्ट्रीम बंद हो गई है।

उदाहरण 2: गतिशील नेविगेशन

ऐसे परिदृश्य पर विचार करें जहां आपको सीकग() ऑफसेट की गतिशील रूप से गणना करनी होगी। आइए समझें कि कोड उदाहरण की सहायता से ऑफसेट की गतिशील रूप से गणना कैसे करें।

#शामिल करें

#शामिल

नेमस्पेस एसटीडी का उपयोग करना ;

int यहाँ मुख्य ( ) {

ifstream sgFile ( 'सीकफ़ाइल.txt' ) ;

int यहाँ ओफ़्सेट = 8 ;

sgफ़ाइल. तलाश ( ओफ़्सेट , आईओएस :: रखना ) ;

चार बफर [ 8 ] ;

sgफ़ाइल. पढ़ना ( बफर , 8 ) ;

अदालत << 'सामग्री: ' << बफर << अंतः ;

sgफ़ाइल. बंद करना ( ) ;

वापस करना 0 ;

}

जैसा कि आप देख सकते हैं, हम उसी फ़ाइल से सामग्री पढ़ रहे हैं जिसे हमने पिछले उदाहरण, 'sekgFile.txt' में बनाया था। Seekg() फ़ंक्शन फ़ाइल में वर्तमान स्थिति (ios::cur) पर गेट पॉइंटर सेट करता है, और इसे गणना ऑफसेट (8 अक्षर) द्वारा स्थानांतरित किया जाता है। रीड() फ़ंक्शन गेट पॉइंटर की वर्तमान स्थिति से आठ वर्णों को बफर में पढ़ता है।

'सीकेजी() फ़ंक्शन' फ़ाइल की सामग्री और आठ अक्षरों की ऑफसेट को देखते हुए, प्रोग्राम फ़ाइल के 9वें अक्षर से शुरू होने वाले सबस्ट्रिंग को आउटपुट करेगा। इसलिए, प्रोग्राम का अपेक्षित परिणाम 'फ़ंक्शन' है। आइए निम्नलिखित दिए गए आउटपुट में इसकी पुष्टि करें:

यह उदाहरण गतिशील रूप से ऑफ़सेट की गणना करके Seeg() के लचीलेपन को प्रदर्शित करता है।

उदाहरण 3: अंत से नेविगेट करना

इस उदाहरण में, हम प्रदर्शित करेंगे कि फ़ाइल के अंत से फ़ाइल में डेटा को कैसे पढ़ा जाए। यहां, सीकग() का उपयोग फ़ाइल के अंत से नेविगेट करने के लिए किया जाता है। नकारात्मक ऑफसेट उस स्थिति को इंगित करता है जो अंत के सापेक्ष है। निम्नलिखित दिए गए कोड को देखें:

#शामिल करें

#शामिल

नेमस्पेस एसटीडी का उपयोग करना ;

int यहाँ मुख्य ( ) {

ifstream sgFile ( 'सीकफ़ाइल.txt' ) ;

sgफ़ाइल. तलाश ( - 4 , आईओएस :: अंत ) ;

चार बफर [ 8 ] ;

sgफ़ाइल. पढ़ना ( बफर , 8 ) ;

अदालत << 'सामग्री: ' << बफर << अंतः ;

sgफ़ाइल. बंद करना ( ) ;

वापस करना 0 ;

}

यह C++ प्रोग्राम ' SeekgFile.txt' नाम की एक फ़ाइल खोलता है जो sgFile.seekg(-4, ios::end) का उपयोग करके फ़ाइल के अंत से चार वर्णों के गेट पॉइंटर को पीछे की ओर ले जाता है, उस स्थिति से अगले आठ वर्णों को पढ़ता है एक बफ़र, और फिर बफ़र की सामग्री को कंसोल पर प्रिंट करता है। फ़ाइल की सामग्री को 'सीकेजी() फ़ंक्शन' के रूप में देखते हुए, अपेक्षित आउटपुट 'एक्शन' है। आइए निम्नलिखित आउटपुट के स्क्रीनशॉट में आउटपुट का मिलान करें:

निष्कर्ष

संक्षेप में, सीकग() फ़ाइल स्ट्रीम को सटीकता के साथ नेविगेट करने के लिए एक मूल्यवान संपत्ति के रूप में उभरती है। मनमानी स्थितियों की तलाश करने, गतिशील रूप से ऑफसेट की गणना करने और फ़ाइल के भीतर विभिन्न बिंदुओं से नेविगेट करने की अपनी क्षमता के माध्यम से, सीकग () डेवलपर्स को फ़ाइल संचालन को कुशलतापूर्वक संभालने के लिए सशक्त बनाता है। जैसा कि हमने उदाहरणों में देखा है, C++ में फ़ाइल स्ट्रीम के साथ काम करते समय Seeg() में महारत हासिल करने से आपका नियंत्रण और लचीलापन बढ़ता है। हालाँकि, यह C++ में मजबूत और त्रुटि मुक्त फ़ाइल संचालन सुनिश्चित करने के लिए अपवाद प्रबंधन और संभावित डेटा रेस परिदृश्यों पर सावधानीपूर्वक विचार करने की मांग करता है।