Text-Dateien (.txt) verändern (HILFE)



  • newling987 schrieb:

    Mein Programm sieht bis jetzt so aus:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <cstring>
    
    using namespace std;  // schlechter Stil
    int main()
    {
    	char zeichen[500];  // was, wenn die Datei groeszer ist?
    
    	ifstream Einlesen;
    
    	Einlesen.open("t.txt", ios::out);  // ifstream mit ios::out? really?
    	                                   // und ueberhaupt, dafuer gibts
    	                                   // einen Konstruktor.
    
    	int k = 0;
    
    	while (!Einlesen.eof()) 
    	{
    		Einlesen >> zeichen[k];  // 1)
    		k++;
    	}
    
    	Einlesen.close();
    
    	for (int i = 1; i < 499; i++)  // 2)
    	{	zeichen[i];  // was macht das?
    
    		if (zeichen[i] >= 97 && zeichen[i] <= 122)  // warum nicht 'a' und 'z' statt der Zahlenwerte?
    		{
    			zeichen[i] - 32;  // 3)
    		}
    	}
    
    	ofstream Ausgabe;
    
    	Ausgabe.open("a.txt", ios::out);  // --> Konstruktor.
    
    	Ausgabe << zeichen;
    
    	Ausgabe.close(); 
    
    	system("PAUSE");  // unportabel, umstaendlich und Sicherheitsproblem
    	return 0;
    }
    

    [...]

    3.Ich habe Problem wie ich ans Ende meines char-Arrays (zeichen[500]) die Nullterminierung (\0) setzen kann. 4)

    1. Der operator>>() überliest standardmäßig Whitespace. Entweder den Manipulator std::noskipws oder std::cin.get() verwenden.
    2. Ein Array T[N] geht in C und in C++ von 0 bis N-1 .
    3. zeichen[i] - 32; ist ein Tolles Statement, nur Speicherst du das Ergebnis nirgends. Das merkt auch dein Compiler. Er weiß, das es keinen Effekt hat und betritt den Schleifenkörper erst garnicht.
    4. Nach deiner (kaputten5) Leseschleife ist k irgendwo in der nähe des zuletzt gelesenen Zeichens im array. zeichen[k] = '\0'; wäre also eine gute Idee.
    5. Du machst: Prüfen auf Fehler, lesen, verarbeiten. Richtig wäre: Lesen, prüfen auf Fehler, verarbeiten.


  • @Swordfish :
    1)Leider hatten wir die Befehle beim Einlesen von Textdateien noch nicht.
    Wenn ich es so schreibe "cin.get(zeichen[k]);" funktioniert das Einlesen nicht
    mehr 😕

    3)ich weiß leider nicht wie ich es speichern sollte. ich hatte folgendes
    probiert, aber so hat es auch nicht funktioniert 😞 :

    char umgewandelt[500];
    for (int i = 0; i < 499; i++)
    	{	
    		if (zeichen[i] >= 97 && zeichen[i] <= 122)
    		{
    			umgewandelt[i] = zeichen[i] - 32;
    
    		}
    		umgewandelt[i] = zeichen[i];
    	}
    
    1. Alles klar vielen Dank! Mit
      zeichen[k-1] = '\0'; funktionierts 🙂


  • so klappt es mit dem Umwandeln von klein in großbuchstaben jetzt 🙂

    for (int i = 0; i < 499; i++)
    	{	umgewandelt[i] = zeichen[i];
    
    		if (zeichen[i] >= 97 && zeichen[i] <= 122)
    		{
    			umgewandelt[i] = zeichen[i] - 32;
    
    		}
    
    	}
    

    Kann mir jemand mit dem Leerzeichenproblem bitte helfen?



  • newling987 schrieb:

    so klappt es mit dem Umwandeln von klein in großbuchstaben jetzt 🙂

    for (int i = 0; i < 499; i++)  // denk nochmal ueber die abbruchbedingung nach
    	{	umgewandelt[i] = zeichen[i];  // erklaer mal wozu?
    
    		if (zeichen[i] >= 97 && zeichen[i] <= 122)  // 'a' und 'z' ...
    		{
    			umgewandelt[i] = zeichen[i] - 32;
    		}
    		
    	}
    

    Das 500-Zeichen Limit besteht immer noch. Wie wäre es, beide Dateien zu öffnen, ein Zeichen zu verarbaiten und gleich in die Ausgabedatei zu schreiben?

    newling987 schrieb:

    Kann mir jemand mit dem Leerzeichenproblem bitte helfen?

    std::cin >> std::noskipws >> zeichen;

    //edit: aja, für die Zukunft: "funktioniert nicht" ist keine Fehlerbeschreibung.


  • Mod

    newling987 schrieb:

    Kann mir jemand mit dem Leerzeichenproblem bitte helfen?

    Ja. Und zwar zwei der Leute, die bereits geantwortet und dir mit diesem Problem geholfen haben. Solche Antworten sind selten dazu gedacht, dass man sie überfliegt und größtenteils ignoriert.



  • @Swordfish

    1. Hab's zu "i<500" verändert!
    2. Damit die zeichen aus "zeichen" in "umgewandelt" gespeichert werden.
      es funktioniert auf alle fälle so bei mir 😕 auch wenn es vllt was umständlich
      ist.. 🙄
      (habe zudem zeile 40 geändert: Ausgabe << umgewandelt;)
    3. Wenn ich "Einlesen" lösche funktionierts nicht mehr.
      Diese beiden Befehle hatten wir zudem noch nicht, daher hab ich auch leider
      Schwierigkeiten damit, wie ich sie anwenden soll.


  • SeppJ schrieb:

    newling987 schrieb:

    Kann mir jemand mit dem Leerzeichenproblem bitte helfen?

    Ja. Und zwar zwei der Leute, die bereits geantwortet und dir mit diesem Problem geholfen haben. Solche Antworten sind selten dazu gedacht, dass man sie überfliegt und größtenteils ignoriert.

    ich hatte die vorgeschlagenen befehle leider noch nicht (wie erwähnt) und hatte gehofft jemand könnte mir genauer etwas dazu erklären und helfen wie genau ich sie anwenden soll! 🙂
    ich programmiere leider noch nicht solange und stehe noch am anfang



  • Du solltest die Antworten auch durchlesen. Durchlesen, nicht überfliegen.

    Hier schreiben Programmierer, die verwenden wenig Prosa. Daher ist das Wissen ziemlich kompakt.

    Das steht schon in der Antwort von Swordfish über dem //edit : https://www.c-plusplus.net/forum/p2437217#2437217



  • dachte das forum sei auch für anfänger gedacht und es wäre nicht schlimm wenn man nochmal nachfragt :S



  • newling987 schrieb:

    dachte das forum sei auch für anfänger gedacht und es wäre nicht schlimm wenn man nochmal nachfragt :S

    Fragen ist nicht schlimm. Wenn Du dann aber die Antworten nicht sorgfältig liest, muß man davon ausgehen, daß Du sie nicht würdigst. Dafür ist aber unser Leben zu kurz, um das widerspruchslos hinzunehmen.


Anmelden zum Antworten