2017-02-27 5 views
1

Ich habe Probleme beim Trennen einer bestimmten Zeichenfolge aus einer Textzeile in einer Datei, die ich in C++ "hochgeladen" habe.C++ Separate Zeichenfolge von Zeile in Textdatei

Unten ist die Zeile, die ich nach Spalte analysieren möchte.

2016.12.06 s "Die inzestuöse Beziehung zwischen Regierung und die großen Unternehmen gedeiht im Dunkeln. ~ Jack Anderson [4]" 0 3 39 blau weiß PATRICK Bardwell

ich jedes Stück Information in ein brauchen verschiedene Variable, und zuerst habe ich implementiert inFile >> var1 >> var2 >> etc; aber wenn ich zu dem Zitat komme, nimmt diese Methode nur das erste Wort des Zitats: "The" und stoppt dann.

Irgendwelche Tipps, wie man alles, was in der "" ist, in eine einzige Saite legt? Mein aktueller Code ist unten.

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <fstream> 
#include <stdlib.h> 
#include <cstring> 

using namespace std; 

// int main 

int main() 
{ 

    // Declare variables 
    string userFile; 
    string line; 
    string date; 
    char printMethod; 
    string message; 
    int numMedium; 
    int numLarge; 
    int numXL; 
    string shirtColor; 
    string inkColor; 
    string customerName; 
    string customerEmail; 
    string firstLine; 
    string delimiter = "\""; 


    // Prompt user to 'upload' file 

    cout << "Please input the name of your file:\n"; 
    cin >> userFile; 
    fstream inFile; 
    inFile.open(userFile.c_str()); 

    // Check if file open successful -- if so, process 

    if (inFile.is_open()) 
    { 
     getline(inFile, firstLine); // get column headings out of the way 
     cout << firstLine << endl << endl; 

     while(inFile.good()) // while we are not at the end of the file, process 
     { 
      getline(inFile, line); 
      inFile >> date >> printMethod; 

     } 

     inFile.close(); 
    } 

    // If file open failure, output error message, exit with return 0; 

    else 
    { 

     cout << "Error opening file"; 

    } 

    return 0; 

} 
+1

Lesen Sie die gesamte Zeichenfolge in eine Variable, und dann das Parsen. Haben Sie mit [regex] experimentiert (http://www.cplusplus.com/reference/regex/)? – bejado

+0

Wie analysiere ich nach dem Lesen alles in eine Variable? Und nein, habe ich nicht, zuerst höre ich davon (brandneuer C++ Student). Danke für die Antwort BTW. –

+0

Öffnen Sie Ihr C++ Buch in dem Kapitel, das 'std :: string' beschreibt. Sie müssen dieses Kapitel gelesen haben, da Sie 'std :: string's in Ihrem Code verwenden. Nun, das gleiche Kapitel beschreibt auch viele erstaunliche Methoden, die die 'std :: string' Klasse hat. Wie 'find()', um ein Zeichen in der Zeichenfolge und 'substr()' zu finden, um Teile der Zeichenfolge herauszunehmen. Was brauchst du noch? Verwenden Sie 'find()', um zu ermitteln, wo sich die verschiedenen Teile des Strings befinden, und 'substr()', um sie zu extrahieren. Problem gelöst. Das Erlernen, wie man technische Dokumentation liest, ist eine notwendige Fähigkeit für jeden C++ Entwickler. –

Antwort

0

Sie können das regex Modul den zitierten Text aus der Zeichenfolge analysieren, nachdem Sie es in eine Variable gelesen habe. Achten Sie darauf, #include <regex>.

In Ihrem Fall lesen Sie jede Zeile in eine Variable namens line. Wir können die Variable line an eine Funktion namens regex_search übergeben, die die zitierte Textübereinstimmung extrahiert und in eine andere Variable, in diesem Fall res, einfügt. res[1] enthält die Übereinstimmung, an der wir interessiert sind, und weisen sie einer Variablen namens quotedText zu.

string quotedText; 
while(inFile.good()) // while we are not at the end of the file, process 
{ 
    getline(inFile, line); 

    regex exp(".*\"(.*)\"");   // create a regex that will extract quoted text 
    smatch res;      // will hold the search information 
    regex_search(line, res, exp);  // performs the regex search 
    quotedText = res[1];    // we grab the match that we're interested in- the quoted text 
    cout << "match: " << quotedText << "\n"; 
    cout << "line: " << line << "\n"; 
} 

Sie sind dann frei, was auch immer Sie mit quotedText tun möchte.

Regex-Syntax ist ein ganzes Thema für sich. Für weitere Informationen, see the documentation.

Verwandte Themen