1. #1
    Ensign
    Dabei seit
    Sep 2011
    Beiträge
    140

    [C++] ifstream Daten einlesen in Variable

    Hi an alle,

    ich bin gerade am rumprobieren mit C++ Funktionen usw. und habe mal versucht eine Datenbank zu erstellen.

    Sie funktioniert soweit das ich die eingegebenen Kunden speichern kann in eine TXT Datei.

    Diese möchte ich nun beim nächsten Programmstart wieder einlesen und in die gleichen Variablen speichern wie sie am anfang waren.

    Da gibt es einmal die:

    Kunden ID
    Kunden Vorname
    Kunden Nachname

    Diese speichert er folgendermaßen in die TXT Datei:

    1 // ID
    Hans // Vorname
    Wurst // Nachname
    1Ende // Punkt an dem er aufhören soll einzulesen
    2 // Entweder soll er hier wieder anfangen einzulesen oder ich würde noch ein 2Anfang generieren.
    Peter //Vorname
    Baum // Nachname
    2Ende // Wieder das Ende


    Nun bin ich auf der Suche wie er die Daten einliesst und bei den bestimmten Punkten aufhört einzulesen und ab einem bestimmten Punkt wieder anfängt.
    Im Moment sieht es bei mir so aus

    Code:
    for(t=1;t<=50;t++)
    {
    ifstream in ("Daten.txt");
    in >> Kundenfeld[t].nr >> Kundenfeld[t].KundeVorname >> Kundenfeld[t].KundeNachname,'[t]Ende';
    }
    das '[t]Ende' gibt ja so wie ich es erfahren habe an das er dort aufhört einzulesen. Stimmt dies ? Und wie lege ich fest ab wo er beim starten der nächsten Schleife wieder anfängt mit dem einlesen ?

    Danke euch

    Mfg

  2. Anzeige
    Logge dich ein, um diese Anzeige nicht zu sehen.
  3. #2
    Cadet 2nd Year
    Dabei seit
    Apr 2012
    Beiträge
    21

    [C++] AW: ifstream Daten einlesen in Variable

    du musst das über eine struct machen:

    struct anlegen:

    Code:
    struct KundenDaten
    {
    string vorname;
    string nachname;
    }

    dann struct array anlegen:

    Code:
    KundenDaten Datensatz1[50];

    ggf. struct leeren oder mit hex "00" bytes befüllen. (schreib ich hier jetzt mal nicht auf ... machst halt das string objekt leer indem du per memcpy die volle länge mit hex 00000 füllst)


    dann struct mit kundendaten befüllen:

    Code:
    getline(cin,Datensatz1::vorname[0]);
    getline(cin,Datensatz1::nachname[0]);
    getline(cin,Datensatz1::vorname[1]);
    getline(cin,Datensatz1::nachname[1]);

    oder per datei:

    Code:
    ifstream input_file("datei.txt", ios::binary);
    input_file.read((char*)&Datensatz1, sizeof(Datensatz1));  
    input_file.close();
    dann struct schreiben geht vom grunde her wie lesen nur ich würde es für die datensätze mit ios::app machen .... an deiner stelle würde ich (falls du c++ neuling bist) erstmal grundlagen leernen, sonst kommst du nicht wirklich weit.

    oder versuch autoit ... das geht da alles wesentlich leichter und ohne umstände. ich persönlich schreibe nur dlls in c++ und binde sie dann in scriptsprachen ein.

    Edit: kleine Korrektur
    Geändert von WhiteLionATX (26.04.2012 um 15:19 Uhr)

  4. #3
    Ensign
    Ersteller dieses Themas

    Dabei seit
    Sep 2011
    Beiträge
    140

    [C++] AW: ifstream Daten einlesen in Variable

    Danke dir für die Hilfe. Heute keine Zeit mehr das umzusetzen aber bei Fragen melde ich mich am Wochenende. Danke dir

  5. #4
    Lieutenant
    Dabei seit
    Jun 2010
    Ort
    Erlangen
    Beiträge
    601

    [C++] AW: ifstream Daten einlesen in Variable

    Zitat Zitat von WhiteLionATX Beitrag anzeigen
    du musst das über eine struct machen:

    struct anlegen:

    Code:
    struct KundenDaten
    {
    string vorname;
    string nachname;
    }

    dann struct array anlegen:

    Code:
    KundenDaten Datensatz1[50];

    ggf. struct leeren oder mit hex "00" bytes befüllen. (schreib ich hier jetzt mal nicht auf ... machst halt das string objekt leer indem du per memcpy die volle länge mit hex 00000 füllst)
    NEIN!!!! Niemals eine Klasseninstanz mit memcpy glattbügeln, es sei denn du magst UNDEFINIERTES VERHALTEN. Außerdem ist ein frisch erzeugtes std::string Objekt sowieso leer.

  6. #5
    Cadet 2nd Year
    Dabei seit
    Apr 2012
    Beiträge
    21

    [C++] AW: ifstream Daten einlesen in Variable

    also beim string objekt gebe ich dir recht, aber z.B beim char array ? was machst du denn da ?
    mal angenommen du möchtest z.B. mit hex werte arbeiten also z.B. bytes vergleichen ...inklusive aller (also auch x\0) bytes ... wie stellst du das an ? - also ich plätte das array in voller länge durch memcpy und mach dann memcmp ....und du ? wann gibt es dabei undefinierbares verhalten (sofern man die länge berücksichtigt) ?

    ...okey du könntest jetzt sagen: wenn du die länge kennst, dann brauchst du es nicht ... das stimmt, aber wenn ich dann doch mal nur einen cstring habe, was spricht dagegen ?
    Geändert von WhiteLionATX (26.04.2012 um 21:10 Uhr)

  7. #6
    Lieutenant
    Dabei seit
    Jun 2010
    Ort
    Erlangen
    Beiträge
    601

    [C++] AW: ifstream Daten einlesen in Variable

    Ich sprach von Klasseninstanzen, nicht von character-arrays. Google mal nach "C++ PODs". Alles was nicht in diese Kategorie fällt, solltest du auf KEINEN Fall mit memset() oder memcpy() beschreiben.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •