Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Wert von Dateien einlesen und bearbeiten

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
18.06.2004, 11:28 Uhr
t10ottoo



Hi,

hab da nen kleines Problem, hab auch hier im Forum schon danach gesucht, aber nix genaueres darüber gefunden.

Also erstmal zum Quellcode. Hier ist meine Speicherfunktion:

C++:
void CDateiDlg::OnSave()
{
UpdateData(TRUE);

string produkt_s;
// Variable für Dateien
ofstream datei;
// Datei anlegen
datei.open("Haushalt.txt",ios::app);
    
produkt_s = m_produkt;
// Produkt und Menge in die Datei schreiben
datei << produkt_s << endl << m_menge << endl << endl;
// Datei schließen
datei.close();

UpdateData(FALSE);
}


produkt_s ist nur ne Hilfdatei, da ich keine CStrings in die Datei schreiben kann.
m_produkt und m_menge übernimmt er von zwei Editfelder. Also das Programm soll Produkt und die dazugehörige Menge speicher, das klappt auch wunderbar, die Datei sieht dann so aus:


Code:
Puderzucker
1

Mehl
2

Butter
4



So, das auslesen klappt auch wunderbar:

C++:
void CDateiDlg::OnButter()
{
    string produkt;
    ifstream datei;
    datei.open("Haushalt.txt",ios::in);

while(!datei.eof())
{ // while
    datei >> produkt;
    produkt = produkt.c_str();;
    if (produkt == "Butter")
    { // if2
        m_produkt = produkt.c_str();
        datei >> m_menge;
        UpdateData(FALSE);
    } // if2
    else
    { // else2
    } // else2
} // while
}



So, das klappt auch wunderbar, also wenn ich auf den Button "Butter" klicke, dann durchsucht er die ganze Datei bis zum Ende nach dem Wort "Butter".

Nun möcht ich aber, wenn das Produkt "Butter" geladen wurde und auch die Menge in dem Eingabefeld steht, dass ich die Menge ändern kann. Wenn ich jetzt einfach die Menge änder und auf Speichern klicke, dann hängt er das als neues Produkt unten an, so wird die Datei aber immer größer, würde zwar auch gehen ist aber ne sehr unsaubere Lösung

Daher bitte ich um einen kleinen Denkanstoß, weil leider net, wie ich einzelne Daten in der Datei ändern kann...

Vielen Dank schonmal
Thomas

Dieser Post wurde am 18.06.2004 um 11:29 Uhr von t10ottoo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.06.2004, 12:27 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


einfachste Lösung ist vermutlich immer die ganze datei komplett neu zu schreiben...

p.s.: Wer ist eigentlich der Hobbykoch? Du oder dein Prof der dir diese Aufgabe aufdrückt?
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 18.06.2004 um 12:28 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.06.2004, 15:58 Uhr
t10ottoo




Zitat:
Windalf postete
einfachste Lösung ist vermutlich immer die ganze datei komplett neu zu schreiben...

p.s.: Wer ist eigentlich der Hobbykoch? Du oder dein Prof der dir diese Aufgabe aufdrückt?


LOL, meine Freundin will das Programm haben *g*

Aber das mit dem neuschreiben..hmm...is ja ein wenig schwierig, wo soll er denn die ganzen Daten hernehmen? mit der "OnSave"-Funktion fügt er ja die Daten immer nur an.

Irgendwie bräucht ich nen Algorithmus, der die Datei durchläuft, bis er zum Beispiel "Butter" findet, dann springt er eins weiter zur Menge und änder diese dann...
aber ich bin dafür anscheinend zu doof *g*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.06.2004, 16:04 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also das mit dem einfach überschreiben geht nicht so ohne weiters... würde nur klappen wenn die neue menge die gleiche anzahl an stellen hätte wie die alte...

am besten speicherst du ein rezept in deinem programm in variablen und wenn sich das was ändert schreibst du wie gesagt immer gleich die ganze datei neu das ist wirklich am einfachsten
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.06.2004, 16:39 Uhr
t10ottoo



Najo, das ist ja kein Rezept, das soll ja der Bestand im Schrank sein, dann muss sie net immer den ganzen Schrank ausräumen, wennse wissen will, ob sie noch das eine oder andere Gewürz hat...


Zitat:

würde nur klappen wenn die neue menge die gleiche anzahl an stellen hätte wie die alte...


Das mit der gleichen Anzahl an Stellen ist kein Problem, dann häng ich den Zahlen unter 10 einfach ne 0 vorne ran.
Aber wie mach ich des denn dann?

Dieser Post wurde am 18.06.2004 um 16:39 Uhr von t10ottoo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.06.2004, 16:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also pass auf die einfache variante ist die


C++:
typedef struct {std::string artikel_bez, unsingned int menge; std::string einheit;}artikel; //falls da noch mehr information mit reinmuss halt noch ein paar variablen mehr definieren...

std::vector<artikel> Haushaltsliste;

so imer wenn du dein programm öffnest machst du eine schleife in der art

while(!datei.eof()){
//eine zeile in ein artikel einlesen
Haushaltsliste.push_back(eingelsener_artikel);  //artikel der Haushaltsliste hinzufügen...
}

//selbiges machst du wenn du das programm beendest einmal den kompletten vector durchgehen und in die datei ballern...

//so wenn sich was ändern soll musst du nicht mehr dumm in der datei rumsuchen und versuchen das an die richtige stelle zu schreiben, das was weiss ich alles für probleme machen kann, sondern du editierst dein vector (den du wie ein array ansprechen kannst, der kann alles wie ein array nur mehr und einfacher) am ende werden die kompletten änderungen ja neu geschrieben


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.06.2004, 16:51 Uhr
t10ottoo



Ahjo, werd damit mal ein wenig rumspielen, danke

Gruß
Thomas
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: