एक ही बार में लाइन या पूरी टेक्स्ट फाइल को लाइन से कैसे पढ़ें?


86

मैं एक ऐसे ट्यूटोरियल में हूं, जो फाइलों का परिचय देता है (कैसे पढ़ें और लिखने के लिए \ से फाइल करें)

सबसे पहले, यह एक होमवर्क नहीं है, यह सिर्फ सामान्य मदद है जो मैं चाह रहा हूं।

मैं एक समय में एक शब्द पढ़ना जानता हूं, लेकिन मैं यह नहीं जानता कि एक पंक्ति को एक समय में कैसे पढ़ा जाए या संपूर्ण पाठ फ़ाइल कैसे पढ़ें।

यदि मेरी फ़ाइल में 1000 शब्द हैं तो क्या होगा? प्रत्येक शब्द को पढ़ना व्यावहारिक नहीं है।

मेरी पाठ फ़ाइल नाम (पढ़ें) में निम्नलिखित शामिल हैं:

मुझे खेल खेलना पसंद है मुझे पढ़ना अच्छा लगता है मेरे पास 2 किताबें हैं

यह वही है जो मैंने अब तक पूरा किया है:

#include <iostream>
#include <fstream>

using namespace std;
int main (){

  ifstream inFile;
  inFile.open("Read.txt");

  inFile >>

क्या प्रत्येक पंक्ति या प्रत्येक शब्द को अलग-अलग पढ़ने के बजाय, एक ही बार में पूरी फ़ाइल पढ़ने का कोई संभावित तरीका है?


4
यहाँ अच्छी तरह से परिभाषित उत्तर दिए गए हैं: stackoverflow.com/questions/551082/c-read-lines-from-file
sampson-chen


शब्द को शब्द से पढ़ना लाइन से लाइन की तुलना में केवल थोड़ा धीमा है। यदि आपको वास्तव में शब्दों की आवश्यकता है, तो शब्दों को पढ़ना बेहतर है। यदि आप CSV फ़ाइल जैसे लाइन-ओरिएंटेड डेटा के साथ काम कर रहे हैं तो लाइनें पढ़ें।

@Arkadiy जो गलत है। 100 MiB फाइल के लिए, लाइन बाय लाइन पढ़ने में आसानी से सेकंड लगेंगे, जबकि एक सेकंड से भी कम समय में 4 KiB का ब्लॉक पढ़ना।
vallentin

@ वालेंटिन: यह देखते हुए कि धाराएँ सभी बफ़र की जाती हैं, वास्तविक डिस्क रीडिंग पहले से ही ब्लॉक करके की जाती है। बाकी सिर्फ स्मृति में डेटा में हेरफेर है।

जवाबों:


161

आप उपयोग कर सकते हैं std::getline:

#include <fstream>
#include <string>

int main() 
{ 
    std::ifstream file("Read.txt");
    std::string str; 
    while (std::getline(file, str))
    {
        // Process str
    }
}

यह भी ध्यान दें कि यह बेहतर है कि आप स्पष्ट रूप से खुलने की बजाए इसमें फ़ाइल नाम के साथ फाइल स्ट्रीम का निर्माण करें (वही समापन के लिए जाता है, बस विध्वंसक को काम करने दें)।

CPP संदर्भ में इसके बारे में और प्रलेखन std::string::getline()पढ़ा जा सकता है ।

संभवत: एक संपूर्ण पाठ फ़ाइल पढ़ने का सबसे आसान तरीका उन पुनर्प्राप्त लाइनों को संक्षिप्त करना है।

std::ifstream file("Read.txt");
std::string str;
std::string file_contents;
while (std::getline(file, str))
{
  file_contents += str;
  file_contents.push_back('\n');
}  

9
हालांकि स्पष्ट नहीं है, while(getline(f, line)) { ...}वास्तव में ऐसा करने के लिए अनुशंसित तरीका है। यह यहाँ समझाया गया है: gehrcke.de/2011/06/… --- वहाँ भी आप उचित त्रुटि से निपटने के लिए उपयोगी दृष्टिकोण पाते हैं।
डॉ। जन-फिलिप गेर्के

1
उपरोक्त कोड बिना संकलित नहीं होगा#include <iostream>
Tyguy7

@ Tyguy7 की #include <iostream>आवश्यकता क्यों होगी ? यह मुझे लगता है कि <fstream>और <string>पर्याप्त हैं। अगर तुम्हारा मतलब है std::getline, वह भीतर है <string>, भीतर नहीं <iostream>
फैबियो का कहना है कि

@FabioTurati मुझे यकीन नहीं है, मुझे सिर्फ इतना पता है कि एक बार मैंने इसे शामिल किया, सब कुछ ठीक संकलित किया।
टायगुए 7

19

मुझे पता है कि यह वास्तव में बहुत पुराना धागा है, लेकिन मैं एक और तरीका भी बताना चाहूंगा जो वास्तव में बहुत सरल है ... यह कुछ नमूना कोड है:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main() {

    ifstream file("filename.txt");
    string content;

    while(file >> content) {
        cout << content << ' ';
    }
    return 0;
}

2
अच्छा जवाब, मैंने इसे पूरी तरह से एक विशाल स्ट्रिंग में पूरी फाइल को प्राप्त करने के लिए एक स्ट्रिंग के साथ प्रयोग किया
bjackfly पर

5

मुझे लगता है कि आप istream .read () फ़ंक्शन का उपयोग कर सकते हैं। आप बस उचित चंक आकार के साथ लूप कर सकते हैं और मेमोरी बफर पर सीधे पढ़ सकते हैं, फिर इसे किसी प्रकार के मनमाने ढंग से मेमोरी कंटेनर (जैसे std :: वेक्टर) के साथ जोड़ सकते हैं। मैं एक उदाहरण लिख सकता था, लेकिन मुझे संदेह है कि आप एक संपूर्ण समाधान चाहते हैं; कृपया मुझे बताएं कि क्या आपको किसी अतिरिक्त जानकारी की आवश्यकता होगी।


मैं नहीं जानता कि इस उत्तर को किसने उतारा है लेकिन यह अच्छा हो सकता है कि मैं आपके मानकों का नहीं हूं, लेकिन मैं एक ही चीज का उपयोग करता हूं
Javasist

4

ठीक है, यह करने के लिए कोई भी C ++ में प्रदान की गई फ्रीोपेन फ़ंक्शन का उपयोग कर सकता है - http://www.cplusplus.com/reference/cstdio/freopen/ और लाइन द्वारा फाइल लाइन को निम्नानुसार पढ़ सकता है: -

#include<cstdio>
#include<iostream>

using namespace std;

int main(){
   freopen("path to file", "rb", stdin);
   string line;
   while(getline(cin, line))
       cout << line << endl;
   return 0;
}

1

एक अन्य विधि जिसका उल्लेख अभी तक नहीं किया गया है std::vector

std::vector<std::string> line;

while(file >> mystr)
{
   line.push_back(mystr);
}

तो आप बस वेक्टर पर पुनरावृति कर सकते हैं और संशोधित कर सकते हैं / निकाल सकते हैं कि आपको क्या चाहिए /


4
vectorएक अनावश्यक कदम है। आप ifstreamउपयोग करने पर पुनरावृति कर सकते हैं std::istream_iterator<std::string>(inFile)
जोसेफ मैंसफील्ड

0

आप इसका उपयोग फ़ाइल में सभी पंक्तियों को एक-एक करके पढ़ने के लिए कर सकते हैं, फिर प्रिंट कर सकते हैं

#include <iostream>
#include <fstream>

using namespace std;



bool check_file_is_empty ( ifstream& file){
    return file.peek() == EOF ;
}

int main (){


    string text[256];
    int lineno ;
    ifstream file("text.txt");
    int num = 0;

    while (!check_file_is_empty(file))
    {    
        getline(file , text[num]);
        num++;
    }
    for (int i = 0; i < num ; i++)
    {
        cout << "\nthis is the text in " <<  "line " << i+1 << " :: " << text[i] << endl ;


    }
    
    system("pause");

    return 0;
}

उम्मीद है कि यह आपकी मदद कर सकता है :)


0

हैलो भाई यह इस कोड का उपयोग करके सटीक लाइन में स्ट्रिंग को पढ़ने का एक तरीका है

आशा है कि यह आपकी मदद कर सकता है!

#include <iostream>
#include <fstream>

using namespace std;


int main (){


    string text[1];
    int lineno ;
    ifstream file("text.txt");
    cout << "tell me which line of the file you want : " ;
    cin >> lineno ; 



    for (int i = 0; i < lineno ; i++)
    {
        
        getline(file , text[0]);

    }   

    cout << "\nthis is the text in which line you want befor  :: " << text[0] << endl ;
    system("pause");

    return 0;
}

सौभाग्य !

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.