string auslesen von bis



  • Naja mit std::string hast du ja kein Problem:

    size_type begin = str.find_first_of('\"');
    size_type end = str.find_last_of('\"');
    size_type len = end - begin;
    str = str.substr(begin,len);
    

    MfG SideWinder



  • Funktioniert kein Stück bei mir... Wie muss ich das anwenden, wenn der Text in einem string namens test sitzt? und der string test beinahltet folgendes:

    string test="hust\"ladida\"gehweg";



  • Poste mal den Quellcode in dem du mein Beispiel angewendet hast. Eigentlich sollte das schon funktionieren 😕

    Ich verschieb dich mal ins Standard-C++-Forum, ist ja kein konsolenspezifisches Problem.

    MfG SideWinder



  • Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • wenn du den string,in einzelne char´s zerlegst, kannst du die char nach deinem
    zeichen durchsuchen, und hast die position deines zeichens

    c++ code:

    #include <string>
    #include <iostream>

    using namespace std;
    string wort;
    char buchstabe(2);//char array

    for(int i=0;i<wort.size();i++)//wort.size()ist anzahl der buchstaben
    (
    // buchstabe(i) enthält das i´te zeichen des wortes
    cout<<buchstabe(i)<<endl;//ausgabe des arrays
    )

    die klammersybole stimmen nicht!aufpassen
    aber mit arrays und for schleifen kennst du dich ja aus!

    viel spass



  • Ich hab das mal so ausprobioert:

    size_t begin = Source.find_first_of("int"); 
    size_t end = Source.find_last_of(";");
    size_t length = end - begin;
    variable = Source.substr(begin,length);
    

    Aber scheint nicht zu funktionieren... müssen das chars sein? oder können es auch strings sein?



  • Achne... DFUnktioniert doch! Seh ich gerade... problem ist nur, das er nicht das letzte ";" nehmen soll, sondern das nächste...



  • Source.find(';', begin);
    


  • und wie eht es denn aus wenn ich so einen string habe:
    From: XXXXX@XXXXX.com

    [cpp]
    size_t begin = zeile.find_first_of("From:");
    size_t end = zeile.find_last_of("\n");
    size_t length = end - begin;
    from = zeile.substr(begin,length);
    cout <<"Absender: "<< from << endl;

    er soll mir das den Text nach "From:" bis zum zeilenende ausgeben..er macht es aber nicht...sondern haut das "From:" mit aus
    ..wäre für ne kleine hilfe sehr dankbar 😞



  • du musst:

    find_first_not_of("From: ");
    


  • danke schön!!!..noch eine kurze frage
    hier hab ich so eine zeile
    Date: Thu, 7 Apr 2005 21:21:29 -0700

    Hier mein code:

    size_t begin = zeile.find_first_not_of(",");
    size_t end = zeile.find_last_of("-");
    size_t length = end - begin;
    date = zeile.substr(begin,length);
    cout <<"Datum: "<< date << endl;

    wie sage ihm jetzt aber das er die Uhrezit nicht mit raushauen soll
    ala
    size_t end = zeile.find_last_not_of('int:int:int');



  • naja das ist ja sicher alles ein string!
    Somit kennt er int da nicht, die uhrzeit is auch nur nen string!

    Die soll er also nicht mit anzeigen?
    Wenn der String IMMER so aufgebaut ist, such bis zum ersten Doppelpunkt, und ziehe davon 3 ab!



  • wie suche ich denn nach dem doppelpunkt..weil es ist ja der 2te doppelpunkt und nicht der erste??



  • Vielleicht sollte man sich mal informieren, was find_last_not_of wirklich macht...
    MSDN
    Denn

    find_first_not_of("From: ");
    

    macht unter Umständen nicht das, was es soll.



  • ok habs..thx!!!!!!!!!!!!1



  • Achtung! schrieb:

    Vielleicht sollte man sich mal informieren, was find_last_not_of wirklich macht...
    MSDN
    Denn

    find_first_not_of("From: ");
    

    macht unter Umständen nicht das, was es soll.

    erklärs bitte!

    int main(int argc, char* argv[])
    {
     string test="Date: Thu, 27 Jan 2005 21:03.01-0700";
    
     size_t eras = test.find_first_of(":")+2;   //date: loeschen, fuer suche nach :
     test.erase(0,eras);
    
     size_t end = test.find_first_of(":")-4;     //: suchen, und 4 zeichen zurueckgehen
    
     size_t begin = test.find_first_of(",")+2;     //, suchen, 2 zeichen nach vorn gehen
    
     size_t len = end-begin;
     string test2 = test.substr(begin,len+1);
    
     getch();
            return 0;
    }
    

    wenn string immer gleich aufgebaut ist, hab ich mir das überlegt( Ungetestet, und gibt sicher bessere methoden)



  • hab des jetzt so

    size_t begin = zeile.find_first_not_of(", ");
    size_t end = zeile.find_last_of(":");
    size_t length = end - begin-5;
    date = zeile.substr(begin,length);
    cout <<"Datum: "<< date << endl;

    nur macht er die ausgabe vorne wieder mit
    Date: thu, 7.12.2004

    er soll doch den anfang aber nach dem komma machen....



  • macht er bei meinem code auch!



  • noch ein Problem

    wenn ich in einem email mehrere srings mit "Subject:" habe wie unten angegeben..wie sage ich im dass er nur das erste subject nehmen soll?

    Subject: Erreichbarkeit aus Österreich/ DomainOnly Lite für .at/ günstigere Domainpreise
    Date: Mon, 11 Jul 2005 14:20:38 +0200
    MIME-Version: 1.0
    Content-type: text/plain; charset=iso-8859-1
    X-Virus-Scanned: amavisd-new at arcor.de
    X-Amavis-Alert: BAD HEADER Non-encoded 8-bit data (char D6 hex) in message header 'Subject': Subject: Erreichbarkeit aus \326sterreich/ Doma...

    das problem ist ja...das er bei der nächsten email das subject wieder asugeben soll..eben nur das erste in der aktuellen



  • hab das jetzt so

    #include <fstream> // zur Dateibearbeitung 
    #include <string>
    #include <iostream> 
    #include <iomanip>
    
    using namespace std; 
    
    int main() 
    { 
    string zeile ; 
    string dateiname, from, date, subject;
    int length=0,end=0, begin=0, zaehler=0, doppeltf,doppelts,doppeltd;
    
    cout<< "Geben Sie den gewuenschten Dateinamen bzw. Emailfolder ein >>" << endl <<endl;
    cin>> dateiname;
    cout<< endl;
    
     ifstream datei(dateiname.c_str());
    
     if (!datei)
    	 cout << "Fehler beim öffnen der Datei" << endl; 
    
     while(getline(datei,zeile)) //Zeilenweise auslesen
     {
    	 if (zeile.find("X-Account-Key")!=string::npos){    // Wort enthalten
    		 doppeltf=0,doppelts=0,doppeltd=0;
    
    	 if (zeile.find("From: ")!=string::npos)     // Wort enthalten
    	 { 
    			size_t begin = zeile.find_first_not_of("From: "); 
    			size_t end = zeile.find_last_of('\"'); 
    			size_t length = end - begin; 
    			from = zeile.substr(begin,length);
    			if(doppeltf==0){
    			cout <<setw(10)<<left<<"Absender:"<< from << endl;
    			doppeltf=1;}
    	 }
    
    	if (zeile.find("Subject:")!=string::npos)     // Wort enthalten		 { 
    			 size_t begin = zeile.find_first_not_of("Subject:");
    			 size_t end = zeile.find_last_of('\"'); 
    		     size_t length = end - begin; 
    			 subject = zeile.substr(begin,length);
    			 if(doppelts==0){
    			 cout <<setw(10)<<left<<"Betreff:"<< subject << endl;
    			 doppelts=1;}
    			 }
    
    	 if (zeile.find("Date:")!=string::npos)		// Wort enthalten
    			{
    				size_t begin = zeile.find_first_not_of("Date:")+6;
    				size_t end = zeile.find_last_of(":"); 
    				size_t length = end - begin; 
    				date = zeile.substr(begin,length);
    				if(doppeltd==0){
    				cout <<setw(10)<<left<<"Datum:"<< date << endl<<endl;
    				doppeltd=1;}
    				zaehler++;
    
    	 }
    
    	}
     }
    
     cout << endl;
     cout<< "Anzahl der Emails: " << zaehler <<endl;
    
     if (!datei.eof()) return 2; //Fehler beim Lesen der Datei, bin noch nicht am Ende der Datei!
    
     return 0;  //erwartetes Ende
    
     }
    

    aber irgendwie macht er diese zeile

    if (zeile.find("Return-Path:")!=string::npos){
    doppeltf=0,doppelts=0,doppeltd=0;

    gar nicht..so dass er gar nicht weiter reinspringt...hilfe


Anmelden zum Antworten