Textdatei auslesen



  • Makconner schrieb:

    Nächste Frage:

    Problem: ich habe einen String und brauche aus diesem String nur einen kleinen Auszug.... also genau Zeichen 6 bis 10 .. also nur diese 5 Zeichen. Ich möchte jetzt dieses Wort aus 5 Zeichen in eine variable speichern...

    Wie muss diese Zeile leuten.

    Danke schonmal an die die eine kompetente Antwort liefern WOLLEN.

    Genau das selbe wollte ich auch schon mal machen. War aber zu faul mich selber mal ein wenig schlau zu machen oder gar in die Klassen die ich verwende einzuarbeiten.

    Wenn du also jemanden gefunden hat der dir erklärt wie man die std::string's substr verwendet sag mir Bescheid, ja?

    @_Ocin_ auch wenn du anders zählst, in C++ fängt vieles bei 0 an 😉



  • Ja, vor allem wenn man bedenkt, dass die Zählung bei 0 beginnt...

    Edit: Verdammt, war das knapp...



  • ja und wenn er sagt er will den 6. buchstaben aus einem string das is mir schon klar das das der an der 7. stelle im wort is, aber wenn er den 6. will...

    und ich hab schon bereits vermutet das es den substing command oder sowas ähnliches gib, kenne ihn selber aber nur von java und bei c++ hab ich jetzt nicht sooooooooooooo viel mit stringoperationen am hut ....

    naja auserdem bin ich doch selber noch ein noob also net böse sein ! 😉



  • Viele Dank Leute....

    das war hilfreich.. ich dachte schon das ich jetzt angemacht werde, weil ich zu dämlich bin... aber ich bin euch für eure Antworten dankbar...

    Super...

    MfG ... Makconner



  • muss man damit der for - Befehl funktioniert etwas deklarieren?



  • Afaik ist das eine Schleife und kein Befehl. (Oder kann man dazu auch Befehl sagen?)

    Ne, du musst nichts deklarieren.

    Z.B.:

    for(unsigned int i = 0; i < 10; ++i)
            std::cout << i + 65 << " ";
    

    Caipi



  • ok.. habs gemerkt...

    int main()
    {
    	cout << "Eingabe des Textes => ";
    	getline(cin,Text);
    	cout << Text << endl;
    
    	lesen();
    	while(!ein.eof())
    	{
    		ende=0;
    		ende2=0;
    		anfang=0;
    		anfang2=0;
    		ende=Zeile.find(":");
    		ende=ende-1;
    		anfang=0;
    			for(int a=anfang;a<=ende;a++) 
    				{ 
    					Englisch += Zeile[a]; 
    				} 
    		anfang2=ende+2;
    		ende2=Zeile.find("::");
    		ende2=ende2-1;
    			for(int a=anfang2;a<=ende2;a++) 
    				{ 
    					Uebersetzung += Zeile[a]; 
    				} 
    		cout << Englisch << "   " << Uebersetzung  << endl;
    		lesen();
    	}
    return 0;
    }
    void lesen(void)
    {
    	getline(ein,Zeile);
    }
    

    kann mir einer sagen warum sich die schleife nicht wiederholt.. obwol sie es vorher gemacht hat? ... hab ich was gelöscht? .. ich sehs nicht

    das Prog läuft sauber durch.. aber nur ein mal... die Textdatei hat aber zwei zeilen.. daher müsste es zweimallaufen... was es aber nicht macht...



  • Also ich glaube nicht, das das Programm in dem Zustand jemals gelaufen ist.

    Und nochmal: finix (und andere) haben dir den Tipp gegeben std::string::substr() zu nutzen. Das ist eine Methode von std::string, die dir die Schleifen zum Rauskopieren spart.

    Edit: Ein Wort zu viel...



  • naja da muss ich dich halt enttauschen... aber es läuft... ganz nach wunsch... aber eben nur ein mal...

    .. da ist ja noch was... die positionen an denen man die Teile herrausnehmen muss müssen ja erst ermittelt werden, die stehen nicht fix fest... daher habe ich das auch noch ermittel.. naja alles geht... nur leider ohne wiederholung...

    zum Teufen... ich bin blind den ➡ Fehler zu sehen



  • Makconner schrieb:

    naja da muss ich dich halt enttauschen... aber es läuft... ganz nach wunsch... aber eben nur ein mal...

    .. da ist ja noch was... die positionen an denen man die Teile herrausnehmen muss müssen ja erst ermittelt werden, die stehen nicht fix fest... daher habe ich das auch noch ermittel.. naja alles geht... nur leider ohne wiederholung...

    zum Teufen... ich bin blind den ➡ Fehler zu sehen

    also wenn das läuft dann verwendest du bestimmt keinen C oder C++ compiler.
    meiner mag es gar nicht wenn man variablen nicht deklariert oder nicht deklarierte funktionen verwendet 😉
    K.



  • Deine Namensgebung ist wirklich sehr lobenswert. 👎

    Seas Name



  • dann erklär uns doch mal genau dein problem, positionen zu ermitteln etc is doch kein problem...darauf dann substring...also red mit uns... 😉



  • Och man.... natürlich ist das nur der Main-Auszug... also wirlich !! ...

    das Problem ist das die schleife sich nicht wiederholt... aber ich schreib das jetzt nochmal.. eventuell hab ich was gelöscht



  • na ok.. hier der neue, ganze Code

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    ifstream ein("Hirn.txt");
    string Zeile;
    void lesen(void);
    int main()
    {
    	lesen();
    	while(!ein.eof())
    	{
    		cout << Zeile << endl;
    
    		lesen();
    	}
    
    	return 0 ;
    }
    
    void lesen(void)
    {
    	getline(ein,Zeile);
    }
    

    in der Textdatei sind zwei Zeile...
    eigentlich sollten beie Zeine nach und nach eingelesen und ausgedruckt werden... aber er liest nur die erste und dann is ZICK....

    wieso wiederholt er nicht?


  • Mod

    Makconner schrieb:

    na ok.. hier der neue, ganze Code

    #include <iostream>
    #include <string>
    #include <fstream>
    using namespace std;
    ifstream ein("Hirn.txt");
    string Zeile;
    void lesen(void);
    int main()
    {
    	lesen();
    	while(!ein.eof())
    	{
    		cout << Zeile << endl;
    	
    		lesen();
    	}
    
    	return 0 ;
    }
    
    void lesen(void)
    {
    	getline(ein,Zeile);
    }
    

    in der Textdatei sind zwei Zeile...
    eigentlich sollten beie Zeine nach und nach eingelesen und ausgedruckt werden... aber er liest nur die erste und dann is ZICK....

    wieso wiederholt er nicht?

    warm sollte er? wenn die zweite zeile gelesen ist, ist die datei ja schon am ende (wie ich annehme), folglich wird dieser letzte string auch nicht ausgegeben.





  • nunja.. er soll schon.. aber ich hab den Fehler gefunden .. und der lag nicht am Code ....

    aer ok... nächste Frage:

    hier haben wir eine Bedingung

    while(Text[b]!=' ')
    

    die da heist: ➡ "solange Text in Abhängigkeit von b nicht " " ist wiederhole die Schleife.. soweit so gut

    aber ich brauche eine ODER-Verknüpfung und irgendwie bekomm ich es nicht hin.
    ich würde es ja so schreiben

    while(Text[b]!=' ' || Text[b]!='\0')
    

    aber das mag er nicht...



  • Ich glaube du solltest dir nochmal die Logischen Operatoren genauer anschauen.
    Folgendes:

    - || (Oder)      ist true, wenn eine Bedingung true ist.
    - && (Und)       ist true, wenn alle Bedingungen true ist.
    

    In deinem Falle musst du den Oder-Operator durch einen Und-Operator ersetzen. Dann wird die Schleife nämlich nur ausgeführt, wenn alle Bedingungen true sind.

    Caipi


Anmelden zum Antworten