अगर मैं ifstream का उपयोग कर फ़ाइल से एक लाइन पढ़ता हूं, तो क्या स्ट्रीम को वापस पढ़ने के लिए एक तरीका है जिसे मैंने अभी पढ़ा है, सशर्त रूप से?मैं एक लाइन की शुरुआत में एक आईफस्ट्रीम वापस कैसे वापस कर सकता हूं जिसे सी ++ में पढ़ा गया था?
using namespace std;
//Some code here
ifstream ifs(filename);
string line;
while(ifs >> line)
{
//Some code here related to the line I just read
if(someCondition == true)
{
//Go back to the beginning of the line just read
}
//More code here
}
तो अगर someCondition सच है, अगली पंक्ति अगले जबकि लूप यात्रा के दौरान पढ़ा एक ही पंक्ति मैं बस अभी पढ़ा होगा। अन्यथा, अगली देर-लूप पुनरावृत्ति फ़ाइल में निम्न पंक्ति का उपयोग करेगी। अगर आपको और स्पष्टीकरण की आवश्यकता है, तो कृपया पूछने में संकोच न करें। अग्रिम में धन्यवाद!
अद्यतन # 1
तो मैं निम्नलिखित की कोशिश की:
while(ifs >> line)
{
//Some code here related to the line I just read
int place = ifs.tellg();
if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place);
}
//More code here
}
लेकिन जब हालत सच है इसे फिर से एक ही पंक्ति को पढ़ने नहीं है। क्या एक पूर्णांक एक स्वीकार्य प्रकार है?
अद्यतन # 2: समाधान
मेरे तर्क में एक त्रुटि थी। क्योंकि आप पहले से पढ़ी की शुरुआत करने के लिए प्राप्त करने की आवश्यकता
int place = 0;
while(ifs >> line)
{
//Some code here related to the line I just read
if(someCondition == true)
{
//Go back to the beginning of the line just read
ifs.seekg(place);
}
place = ifs.tellg();
//More code here
}
कॉल tellg करने के लिए() समाप्त करने के लिए ले जाया गया था: यहाँ सही संस्करण में काम करता है कि के रूप में मैं यह उन है कि उत्सुक हैं से किसी के लिए करना चाहते हैं लाइन। मैंने पहली बार टेलग() कहा और स्ट्रीम से पहले seekg() कहा जाता है, इसलिए ऐसा लगता है कि कुछ भी नहीं बदला (क्योंकि यह वास्तव में नहीं था)। योगदान देने हेतु आप सभी का धन्यवाद।
स्ट्रीम और स्थिति() को पढ़ने से पहले स्ट्रीम स्थिति प्राप्त करने के लिए टेलग() का उपयोग करें, जिससे आप पहले से सहेजी गई स्थिति में स्ट्रीम स्थिति सेट कर सकें। –
वैसे, ifs >> स्ट्रिंग के लिए लाइनें नहीं मिल रही हैं, लेकिन शब्दों। गेटलाइन के बारे में धन्यवाद std :: getline –
का उपयोग करें। यह भविष्य में कष्टप्रद कीड़े पैदा हो सकता है। –