dateine lesen und speichern in arrays von strukturen
-
Hallo
Ich weiß so ähnliche fragen gibt es schon oft aber es war nie eine Antwort dabei die mir geholfen hat.Ich möchte ein lagerverwaltungsprogramm schreiben hab alles soweit fertig nur nun weiß ich nicht, wie ich eine array von einer structur speichern und wieder laden kann
hier der teil, den ich in eine extra datei speichern möchte:
[code]
struct lagerverwaltung
{
char artikelname[100];
int artikelnummer;
int anzahl;};
ínt main()
{
...
struct lagerverwaltung i [100];dies möchte ich spiechern und dann wenn ich das programm öffne wieder lesen können
vielen dank schonmal
-
Das ist doch viel zu statisch....
Überlege dir ein Format wie eine Zeile aussehen soll, z.B. Artikelnummer + ":" + Artikelname + "=" + Anzahl. Diese Zeile(n) fügst du in eine TStringList ein und verwendest "SaveToFile" bei Programmende und "LoadFromFile" bei Programmstart. So würde ich es machen wenn es ohne Datenbank sein soll.
Ansonsten, das Array mit ner forschleife durchlaufen und Zeile für Zeile via ofstream schreiben:
ofstream file; file.open ("datei.txt", ios::out | ios::app); for(int i=0; i < 100;i++) { file << artikelname[i]; } file.close();
...das gleiche dann mit einem ifstream einlesen...
-
Wenn ich den das selbe mit fstream einlesen will, erscheinen nur zeichen, Zahlen oder gar nichts.
[code]
ifstream file;
file.open ("Datei.txt" , ios::in);for ( i=0; i < 100; i++)
{
file >> artikelname;
}
-
Die for Scheife die du da hast is ja auch fürn Popo. Für was inkrementierst du einen integer und nutzt ihn nicht? Das was du da einliest ist der zufällige Müll der beim deklarieren deines char Arrays entsteht.
artikelname**[i]** auch beim füllen des Arrays verwenden! Wo soll denn sonst auch der ganze Kram hinkopiert werden?
-
in den Array steht ja dann zum Beispiel: 20:erdbeeren=500
wie kann ich denn jetzt dieze zeile in 3 einzelne Variablen speichern ?
bin noch totaler anfänger aber das würde mich wirklich sehr interessieren.
-
String var = "20:erdbeeren=500"; String anzahl ="",artikel="",preis=""; for (int i = 1; i < var.Pos(":");i++) { anzahl += var[i]; } for (int i = var.Pos(":")+1; i < var.Pos("=");i++) { artikel += var[i]; } for (int i = var.Pos("=")+1; i <= var.Length();i++) { preis += var[i]; }
grad mal schnell im Zug getippt
-
Sorry Jungs, meine Erläuterungen sind falsch.
Ich war in Gedanken die ganze Zeit bei den Stringlisten, man ist das peinlich...char Arrays funktionieren natürlich nicht wie Stringlisten
D.h. ein eindimensionales char Array[100] kann nur 100 Zeichen lang sein und nicht 100 mal X Zeichenketten. Möchtest du das char Array füllen dann verwende strcpy alternativ
zu meinem Consolenbeispiel.Um mein Durcheinander wieder gut zu machen, habe ich mal ein kleines Beispielprogramm zur Lagerverwaltung geschrieben.
int main() { struct Lagerverwaltung { char artikelname[100]; char artikelnummer[50]; char anzahl[50]; }; Lagerverwaltung artikel[2]; // 2 Artikel können als Daensatz verarbeitet werden. for(int i = 0; i < 2; i++) { cout<<"Artikel: "; cin>> artikel[i].artikelname; cout<<"Artikelnumer: "; cin>> artikel[i].artikelnummer; cout<<"Anzahl: "; cin>> artikel[i].anzahl; } //------Datensätze schreiben ofstream outfile; outfile.open ("datei.txt", ios::out | ios::app); for(int i = 0; i < 2; i++) { outfile <<"Artikelname: " << artikel[i].artikelname <<endl; outfile <<"Artikelnummer: " << artikel[i].artikelnummer <<endl; outfile <<"Anzahl: " << artikel[i].anzahl <<endl; } outfile.close(); //------Datensätze lesen ifstream infile; infile.open ("datei.txt" , ios::in); for (int i = 0; i < 2; i++) { infile.getline(artikel[i].artikelname,100); infile.getline(artikel[i].artikelnummer,50); infile.getline(artikel[i].anzahl,50); } infile.close(); //-------------Ausgabe for (int i = 0; i < 2; i++) { cout << artikel[i].artikelname <<endl; cout << artikel[i].artikelnummer <<endl; cout << artikel[i].anzahl <<endl; } char z; cin>>z; return 0; }
-
ok vielen Dank
-
Dies zeigt aber wirklich nur eine anfängerfreundliche Möglichkeit.
Mit ein paar Änderungen kann man sich was tolles
draus basteln. Jetzt seid ihr an der ReiheEdit: Schreibt doch mal ne Funktion die eine Artikelnummer
erwartet, den passenden Datensatz herraussucht und dann anzeigt.