Absatz (neue Zeile) in eine txt-datei einfügen an bestimmten Stellen
-
hi,
für euch sicherlich nur eine Kleinigkeit - brauche trotzdem kurz eure hilfe:
habe in einer Text-Datei z.b. folgendes stehen:Name abcdefg vorname xyz99 undsonstirgendeintext
nun möchte ich erreichen, dass die datei geöffnet wird (das kann ich) und in die gleiche datei dann geschrieben wird (wie in die gleich datei schreiben?)
und zudem soll der vorname in einer neuen Zeile stehen, also so:Name abcdefg
vorname xyz99 undsonstirgendeintextund wie geht das ganze dann rückwärts, also dann einlesen von zwei bestimmten zeilen zu einer zeile machen??
Dann noch eine Frage:
habe z.b. folgendes in einer textdatei:Daten:
hans mustermann
strasse 2
00000 Ortdaraus möchte ich gerne folgendes machen (immernoch in die gleiche datei):
Daten:
Name: hans mustermann
Strasse: Allee 2
Ort: 00000 OrtHat hierfür jemand eine Lösung, wie man, wenn Daten: in einer zeile auftaucht dann die nächsten zeilen umschreibt??
kann da mir als newbie jemand helfen?
vielen dank, sollte sich jemand mir annehmen.
-
Zuerst öffnest du eine Datei:
FILE* file; file=fopen("Datei.dat", "rb");
und kannst dann so auf Inhalte der Datei zugreifen:
char Inhalt[20]; char Inhalt2[20]; fscanf(file,"%s ",Inhalt); fscanf(file,"%s ",Inhalt);
nun schließt du Datei mit
fclose(file);
und kannst dann eben wieder in die Datei schreiben:
FILE* file; file=fopen("Datei", "wb"); if(file!=NULL) { fprintf(file,"%s ",Inhalt1); fclose(file); }
Wenn du eine neue Zeile in Datei schreiben willst:
fprintf(file,"\n");
-
Sorry bin auch neu, aber was bedeutet "wb" bzw "rb"? Ich meine konkret das b?
-
Die Funktion fopon öffnet eine Datei und gibt zur weiteren Bearbeitung einen Pointer auf die Datei zurück. Als Parameter wird neben dem Namen auch noch der Bearbeitungsmodus übergeben. r steht für read w für write a für append also öffnet eine Datei am Dateiende.
Binärdateien sind keine Textdateien und rb steht für read binary wb steht für write binary.
-
'b' steht für Binärmodus
=> unter windows besteht ein Zeilenumbruch aus zwei Zeichen (CR + LF)
wenn du die Datei als nur Text öffnest, wird aus diesen zwei Zeichen beim Einlesen automatisch ein einziges '\n'
und erst beim Rausschreiben werden wieder automatisch 2 Zeichen draus gemacht.Im Binärmodus erfolgt diese Umwandlung nicht.
Aber ich denk mal, hier kannst du das b auch weglassen.
Wenn du Dateien sowohl Lesen als auch Schreiben möchtest, gib fopen() hinten als Parameter "w+" mit.
(vgl. http://www.chakotay.de/c-kurs/html/ansi_1.htm)mfg
Martin
-
Vielleicht noch ein paar wichtige Funktionen:
feof Prüfung auf Dateiende liefert 1 falls Dateiende erreicht
fgetc einzelnes Zeichen lesen/schreiben
fgets Zeichenkette lesen/schreiben als Trennung einzelner
Zeichenketten wird das Zeilenende in der Textdatei interpretiert
fscanf Daten lesen/schreibenVielleicht noch ein Beispiel:
#include <stdio.h> #include <string.h> int main (int argc, char *argv[]){ FILE* datei; char zeichen; datei= fopen("aaa.txt", "r"); if(datei != NULL){ while( !feof(datei)){ zeichen= fgetc(datei); printf("%c", zeichen); } fclose(datei); } }
-
TobiasS schrieb:
...
feof Prüfung auf Dateiende liefert 1 falls Dateiende erreicht
...Stimmt so nicht ganz. feof() liefert erst 1 zurück, wenn das Dateiende GELESEN wurde!
-
AJ schrieb:
Stimmt so nicht ganz. feof() liefert erst 1 zurück, wenn das Dateiende GELESEN wurde!
Da hast du recht. Folgendes Programm gibt als Ausgabe 1 obwohl Datei leer ist.
#include <stdio.h> #include <string.h> int main (int argc, char *argv[]){ FILE* datei; char zeichen; int i=0; datei= fopen("test.txt", "r"); if(datei != NULL){ while( !feof(datei)){ i++; zeichen= fgetc(datei); printf("%d", i); } fclose(datei); } return 0; }