Hilfe! Schulprojekt: .txt per c++ editieren, Zeilen löschen
-
Meine oben natürlich [1][4] und [1][5] usw...
Kleiner "Kopier-" Fehler...
-
Im Prinzip muss ich nur eine Sache wissen:
Ich habe eine Datei test.geb.
Ich weiß,dass der User die 4. Zeile der datei komplett gelöscht haben möchte.Wie heißt der C befehl um die Datei zu laden und dann direkt die 4. Zeile zu löschen? So eine Funktion muss es doch geben?
-
ein array sind einfach "viele variablen des gleichen types unter einem namen zusammengefasst"...
wenn du in c einen string darstellen willst brauchst du dafür ein array von chars, da ein char selber nur ein einzelner buchstabe ist (wenn du wirklich c++ verwenden willst kannst du dir dieses problem auch ersparen indem du ein std::string verwendest)...
wenn du nun mehrere "strings" verwenden willst brauchst du ein array von strings also ein 2dimenionales array von chars... versuch dir das mal verständlich zu machen...
was ich mit dem struct meinte war sowas in der art...
typedef struct{char name[30],int alter}person;
damit definierst du dir quasi einen neuen datentyp person mit den eigenschaften name und alter...
also z.b.
person p; sprintf(p.name,"Walter"); p.alter=33;
von einem solchen struct müsstest du dann halt ein array vorhalten um dann quasi eine menge von datensätzen zu speichern... diese kannst du dann immer komplett in einer schleife in eine datei schreiben und wenn du was löschen willst dann löchst du den datensatz aus dem array und nicht aus der datei...
-
Hallo, ich habe testweise mal deine Zeilen in mein Programm kopiert:
typedef struct{char name[30],int alter}person; person p; sprintf(p.name,"Walter"); p.alter=33;
Ich erhalte folgende Fehlermeldungen vom Compiler:
Fehler: geburtstagseingabe.cpp(8,26):Declaration terminated incorrectly
(Zeigt er bei der typedef Zeile an)
Fehler: geburtstagseingabe.cpp(146,8):'alter' is not a member of 'person'
-
ja fehler im struct
typedef struct{char name[30];int alter;}person;
-
Oh, mann. Ich muss dich ja zu Tode nerven, aber ich schaffs einfach nicht.
Ich habe begriffen,das ein String aus mehreren char´s besteht.Jetzt konnte ich mir mit deiner Hilfe mit struct einen eigenen Datentyp erschaffen. Danke,erstmal dafür
typedef struct{char name[30];char vorname[30];char tag[5];}datensatz; datensatz der; sprintf(der.name,"Mustermann"); sprintf(der.vorname,"Max"); sprintf(der.tag,"20.12");
Aber ich komme jetzt nicht drauf,wie ich ihn mehrdimensional bekomme?
Wenn ich datensatz der[10]; schreibe ,gibts nur Blödsinn...
Denn wenn ich jetzt eine Textdatei auslesen und in diesem neuem Datentyp speichern will,muss ich das ganze ja in eine Schleifenstruktur packen. In der lese ich dann mit fscanf die einzelnen Datenzeilen aus und speichere sie dann direkt in meinem Datentyp.Damit ich mehrere reinspeichern kann,muss ich den Datentyp ja aber mehrdimensional machen,und die Schleife zählt dann die Dimensionen hoch...
-
erstmal eine kleine anmerkung... wenn ein char-array ein string repäsentieren soll muss es immer nullterminiert sein... soll heissen wenn du 5 zeichen in ein string reinschreiben willst musst das char-array mindestens 6 zeichen lang sein damit es passt... dein datum verstösst gegen diese regel wenn du
sprintf(der.tag,"20.12"); aufrufst...auch würde ich datum dann ggf z.B. als eigenen datentypen definieren...
typdef struct{int tag;int monat;int jahr;}datum_t; typedef struct{char name[30];char vorname[30];datum_t date;}datensatz;
Denn wenn ich jetzt eine Textdatei auslesen und in diesem neuem Datentyp speichern will,muss ich das ganze ja in eine Schleifenstruktur packen. In der lese ich dann mit fscanf die einzelnen Datenzeilen aus und speichere sie dann direkt in meinem Datentyp
ja musst du... schreib dir einfach eine mehtode readfile die die datensätze in dein datensatzarray einliest... eine mehtode die das array komplett in der datei speichert und eine methode die dir nen datensatz aus dem array löscht...
-
#include <iostream>
#include <string>int main ()
{
string text;
cout <<"Eingabe des Textes:";
getline (cin, text);
cout<<text<<endl;
return 0;
}Probiers mal damit.
-
Es geht ja gerade drum,dass ich nicht weiß wie ich die Daten jetzt in ein Array schreibe.
Ich würde es so ähnlich versuchen:typedef struct{char name[30];char vorname[30];char tag[6];}datensatz; int zaehler=0; FILE *fp; fp=fopen("geburtsdaten.geb","rt"); //Aufruf der Datenbank-Datei while (!feof(fp)) { char test[30]; fscanf(fp,"%s",test); datensatz der[zaehler]; sprintf(der.name,test); zaehler++; } fclose(fp);
Aber so geht es nicht,weil der Array vermutlich falschgesetzt ist!?
-
da du es ja eher c-like machen willst (in c++ könnte man sich die sache mit std::strings und überladung von << und >> sehr viel einfacher machen jedoch verlangt das dann schon ein bisschen tiefergehende programmierkenntnisse) würde ich dir beim auslesen emfehlen z.b. strtok zu verwenen.... du schreibst in jede zeile deiner datei einen datensatz... zum einlesen nimmst du dann fgets und liest immer eine komplette zeile ein und lässt dir die einzelnen bestandteile dann mit strtok separieren....
-
Bleibt immer noch das "Abspeicher"-Problem...
-
Bleibt immer noch das "Abspeicher"-Problem...
Wiso das abspeichern ist doch einfacher als das einlesen...
in etwa in der art...
typedef struct{char name[30];char vorname[30];char tag[6];}datensatz int saveFile(const char* filename,datensatz *d, int n){ FILE *fp; int i; if(!(fp= fopen(filename;"w")))return 1; for(i=0;i<n;++i) fprintf(fp,"%s;%s;%s\n",d[i].name,d[i].vorname,d[i].tag); fclose(fp) return 0; }