Textdateien Auslesen und Inhalt bearbeiten

Thane

Grünschnabel
Hallo alle miteinander.

Seit einiger Zeit versuche ich ein Programm zu schreiben mit dem ich Datensätze aus Eingabefeldern abspeichern kann. Das geht. Ich will außerdem Die Datensätze wieder auslesen können. Das geht nur Teilweise und ich glaube ich habe dafür auch nicht die Beste Lösung. Und bearbeiten lassen sich die Datensätze auch nicht wirklich. Ich kann nichtmal auswählen welchen Datensatz ich auslesen will. Es wird immer nur der erste ausgelesen. Ich bin noch recht neu beim Programieren und habe keine Ahnung wie ich das lösen soll. Vielleicht weiß ja einer von euch bescheid und kennt vielleicht sogar bessere Möglichkeiten der umsetzung.
Das hier wäre der Code zum Einlesen und Speichern:

C++:
void CKundenstammView::OnBnClickedLoad()
{
   //Datei zum lesen öffnen
   CStdioFile Datei(m_strDateiname,CStdioFile::modeRead);
   if(!Datei.m_pStream)
     return;

   
   CString strKnummer;
   CString strNname;
   CString strVname;
   CString strGeburt;
   CString strStrasse;
   CString strOrt;
   CString   strPlz;
   CString strTnummer;
   
   int nStelle;
   CString str;

   CString strDatensatz;
   
   
   //Inhalt des Datensatzes einlesen
   Datei.ReadString(strDatensatz);
   
   //von links an nach ; Suchen
   nStelle = str.Find(";");

   //Von links bis zum Zeichen Übertragen
   strKnummer = str.Left(nStelle);

   //Länge des Strings bis zu nStelle + 1 von Rechts (nStelle beginnt links)
   str = str.Right(str.GetLength() - (nStelle + 1));

   nStelle = str.Find(";");
   strNname = str.Left(nStelle);

   str = str.Right(str.GetLength() - (nStelle + 1));

   nStelle = str.Find(";");
   strVname = str.Left(nStelle);

   str = str.Right(str.GetLength() - (nStelle + 1));

   nStelle = str.Find(";");
   strStrasse = str.Left(nStelle);

   str = str.Right(str.GetLength() - (nStelle + 1));

   nStelle = str.Find(";");
   strGeburt = str.Left(nStelle);

   str = str.Right(str.GetLength() - (nStelle + 1));

   nStelle = str.Find(";");
   strOrt = str.Left(nStelle);

   str = str.Right(str.GetLength() - (nStelle + 1));

   nStelle = str.Find(";");
   strTnummer = str.Left(nStelle);

   str = str.Right(str.GetLength() - (nStelle + 1));

   nStelle = str.Find(";");
   strPlz = str.Left(nStelle);

   str = str.Right(str.GetLength() - (nStelle + 1));
   

   //Werte aus den Variablen in die Felder eintragen
   GetDlgItem(IDC_KNUMMER)->SetWindowText(strKnummer);
   GetDlgItem(IDC_NNAME)->SetWindowText(strNname);
   GetDlgItem(IDC_VNAME)->SetWindowText(strVname);
   GetDlgItem(IDC_STRASSE)->SetWindowText(strStrasse);
   GetDlgItem(IDC_GEBURT)->SetWindowText(strGeburt);
   GetDlgItem(IDC_ORT)->SetWindowText(strOrt);
   GetDlgItem(IDC_TNUMMER)->SetWindowText(strTnummer);
   GetDlgItem(IDC_PLZ)->SetWindowText(strPlz);
}


void CKundenstammView::OnBnClickedSichern()
{
   //Datei zum Lesen öffnen
   CStdioFile Datei(m_strDateiname,CStdioFile::modeRead);
   //Prüfen ob die Datei vorhanden ist
   if (!Datei.m_pStream)
     return;
   //Datei zum Lesen/Schreiben öffnen
   CStdioFile DateiHilfe(m_strDateinameHilfe,CStdioFile::modeCreate | CStdioFile::modeWrite);
   if (!Datei.m_pStream)
     return;

     
  //Variablen deklarieren
   CString strKnummer;
   CString strNname;
   CString strVname;
   CString strGeburt;
   CString strStrasse;
   CString strOrt;
   CString   strPlz;
   CString strTnummer;
   CString strDatensatz;
     

   
   //Werte aus den Felden auslesen und in die Variablen schreiben   
   GetDlgItem(IDC_KNUMMER)->GetWindowText(strKnummer);
   GetDlgItem(IDC_NNAME)->GetWindowText(strNname);
   GetDlgItem(IDC_VNAME)->GetWindowText(strVname);
   GetDlgItem(IDC_STRASSE)->GetWindowText(strStrasse);
   GetDlgItem(IDC_GEBURT)->GetWindowText(strGeburt);
   GetDlgItem(IDC_ORT)->GetWindowText(strOrt);
   GetDlgItem(IDC_TNUMMER)->GetWindowText(strTnummer);
   GetDlgItem(IDC_PLZ)->GetWindowText(strPlz);


   //Werte der Alten Variablen in der neuen zusammenfügen
   strDatensatz = strKnummer;
   strDatensatz += ";";
   strDatensatz += strNname;
   strDatensatz += ";";
   strDatensatz += strVname;
   strDatensatz += ";";
   strDatensatz += strStrasse;
   strDatensatz += ";";
   strDatensatz += strGeburt;
   strDatensatz += ";";
   strDatensatz += strOrt;
   strDatensatz += ";";
   strDatensatz += strTnummer;
   strDatensatz += ";";
   strDatensatz += strPlz;
   strDatensatz += ";";
   strDatensatz += "\n";


   //Den Inhalt der Variable in die (neue) Datei Schreiben
   DateiHilfe.WriteString(strDatensatz);

   //Datei schließen
   Datei.Close();
   DateiHilfe.Close();
}

Einfach schonmal danke vorab für Hilfe :)
 
Hallo Thane

Habe jetzt nur die ersten paar Zeilen durchgesehen, aber Beispiel:
C++:
  CString str;
  CString strDatensatz;
  //Inhalt des Datensatzes einlesen
  Datei.ReadString(strDatensatz); 
  //von links an nach ; Suchen
  nStelle = str.Find(";");

Du liest in strDatensatz und verwendest nacher str für das Find, obwohl str ja ein leerer String ist?

Viele Grüsse
Cromon
 
Zuletzt bearbeitet von einem Moderator:
Das mit dem String hat mir mal ein Freund empfolen der von sich selbst meinte er hätte ein wenig Ahnung davon. Mich hat das auch ein wenig nachdenklich gemacht einen Leeren Datensatz zu verwenden. Auf jeden fall schonmal danke für den anstoß.
 
Zurück