2011-04-13 13 views
5

में फ़ाइल से पूर्णांक और वर्णों का मिश्रण पढ़ना मुझे C++ में फ़ाइल पढ़ने के साथ कुछ परेशानी है। मैं केवल पूर्णांक या केवल अक्षर पढ़ने में सक्षम हूं। लेकिन मैं उदाहरण के लिए, 10af, ff5a दोनों को पढ़ने में सक्षम नहीं हूं। मेरे प्रक्रिया इस प्रकार है:सी ++

int main(int argc, char *argv[]) { 

if (argc < 2) { 
    std::cerr << "You should provide a file name." << std::endl; 
    return -1; 
} 

std::ifstream input_file(argv[1]); 
if (!input_file) { 
    std::cerr << "I can't read " << argv[1] << "." << std::endl; 
    return -1; 
} 

std::string line; 
for (int line_no = 1; std::getline(input_file, line); ++line_no) { 
    //std::cout << line << std::endl; 

     ----------- 
    } 
     return 0; 
} 

तो मैं क्या करने की कोशिश कर रहा हूँ, मैं उपयोगकर्ता वह पढ़ने के लिए चाहता है इनपुट फ़ाइल निर्दिष्ट करने की अनुमति रहा हूँ, और मैं getline उपयोग कर रहा हूँ प्रत्येक पंक्ति प्राप्त करने के लिए। मैं केवल पूर्णांक या केवल वर्णमाला पढ़ने के लिए टोकन की विधि का उपयोग कर सकता हूं। लेकिन मैं दोनों का मिश्रण पढ़ने में सक्षम नहीं हूं। अगर मेरे इनपुट फ़ाइल

2 1 89ab

8 2 16ff

इस फाइल को पढ़ने के लिए सबसे अच्छा तरीका क्या है?

धन्यवाद आपकी मदद के लिए बहुत पहले!

+0

सुनिश्चित नहीं हैं कि आप टोकन की विधि द्वारा क्या मतलब है की आवश्यकता होगी। क्या आप प्रत्येक पंक्ति को टोकननाइज़ करने की कोशिश कर रहे हैं और यह विफल हो जाता है? तो आप यहां कोड के उस हिस्से को क्यों शामिल नहीं करते? – Pirooz

उत्तर

0

std::string s; 
while (input_file >> s) { 
    //add s to an array or process s 
    ... 
} 

का उपयोग करके आप प्रकार std::string की आदानों जो अंक और अक्षर के किसी भी संयोजन हो सकता है पढ़ सकते हैं। आपको लाइन द्वारा इनपुट लाइन को पढ़ने की आवश्यकता नहीं है और फिर इसे पार्स करने का प्रयास करें। >> ऑपरेटर दोनों स्थान और नई लाइन को delimiters के रूप में मानता है।

+0

ओह ठीक है। धन्यवाद। मैं कोशिश करूँगा। मुझे नहीं पता था कि मैं यह कर सकता था। – Sista

2

मैं std::stringstream का उपयोग करता हूं, औरका उपयोग 89ab और 16ff हेक्स संख्याओं की तरह दिखता हूं।

इस तरह दिखना चाहिए:

std::string line; 
for (int line_no = 1; std::getline(input_file, line); ++line_no) 
{ 
    std::stringstream ss(line); 
    int a, b, c; 

    ss >> a; 
    ss >> b; 
    ss >> std::hex >> c; 
} 

आप #include <sstream>

+0

हां आप सही हैं। मुझे यह अर्थपूर्ण लग रहा है। यह बढ़िया काम करता है। अब मुझे समझ में आया है कि क्या करना है। धन्यवाद। :) – Sista