verkettete Liste speichern/laden



  • funktionierts denn jetzt??? 👍 👎 💡



  • PAD schrieb:

    funktionierts denn jetzt???

    Nö! 😞

    PAD schrieb:

    wie sehen diese 4 Zeilen vom Inhalt aus?

    Auf dem Bildschirm wird folgendes ausgegeben:
    Inhalt von Buffer ]vname1#nname1#wohnort1#plz1#strasse1#hausnummer1#vorwahl1#telnr1[
    Inhalt von Buffer ]nname1#wohnort1#plz1#strasse1#hausnummer1#vorwahl1#telnr1[
    Inhalt von Buffer ]wohnort1#plz1#strasse1#hausnummer1#vorwahl1#telnr1[
    Inhalt von Buffer ]plz1#strasse1#hausnummer1#vorwahl1#telnr1[

    Danach kommt wieder die gleiche Fehlermeldung von vorhin!



  • ist data-plz ein string oder eine Integer???? 😃



  • integer



  • Dann ist ja klar was passiert man kann einer Integer keinen pointer of char zuweisen

    Lösung 1 schon mal erwähnt mach nen String draus
    Lösung 2 dieses Verfahren an allen Stellen an denen du Integers benutzt (strol wäre besser atol tuts aber)

    char buffer1[1024 +1];
    ...
        substr(Buffer,buffer1,'#');
        data->plz=atol(buffer1);
        printf("Inhalt von Buffer ]%s[,]%s[, %li\n",buffer,buffer1,data->plz);
    

    😃



  • Hi, also datei wird jetzt schonmal komplett geladen. Ich hab mich für die Variante entschieden, alle werte in char zu ändern.

    Wenn ich jetzt aber die geladenen Daten anzeigen lassen will, wird nix bzw nur Mist angezeigt.

    Komisch ist auch, dass auf dem Bildschirm jetzt folgendes ausgegeben wird:
    Inhalt von Buffer ]vname1#nname1#wohnort1#plz1#strasse1#hausnummer1#vorwahl1#telnr1
    [
    Inhalt von Buffer ]nname1#wohnort1#plz1#strasse1#hausnummer1#vorwahl1#telnr1
    [
    Inhalt von Buffer ]wohnort1#plz1#strasse1#hausnummer1#vorwahl1#telnr1
    [
    Inhalt von Buffer ]strasse1#hausnummer1#vorwahl1#telnr1
    [
    Inhalt von Buffer ]hausnummer1#vorwahl1#telnr1
    [
    Inhalt von Buffer ]vorwahl1#telnr1
    [
    Inhalt von Buffer ]#telnr1
    [
    Inhalt von Buffer ][

    Wurde da irgendwie ein newlinezeichen oder so mit gespeichert, welches jetzt die Werte verändert?



  • Für mich sieht das ganz positiv aus.
    Es wird während des Lesens, jeweils der noch nicht bearbeitete Teil des Inputbuffers angezeigt.
    Das am Ende ein \n steht ist auch erwartet und korrect.
    damit du den Inhalt der einzelnen Elemente sehen kannst, solltest du die PrintZeiger Routine die ich schon mal angesprochen
    habe implementieren.
    Am Ende von data->telnr mußt du noch das \n entfernen
    Frage hast du die Datei mit "rt" oder "rb" geöffnet

    Falls "rt" dann data->telnr[strlen(data->telnr)-1)=0x00;
    Falls "rb" dann data->telnr[strlen(data->telnr)-2)=0x00;

    int ParseOneline(struct person *data)
    {
    printf("data->vname]%s[\n",data->vname);
    printf("data->nname]%s[\n",data->nname);
    ....
    return 0;
    }
    

    Wenn du jetzt in deiner Datei mehrere Zeilen hast sollte für jede beim Lesen diese Ausgabe aus ParseOneLine kommen.
    Es würde sinn machen neben dem Restbuffer auch den jeweils gelesenen Teil anzuzeigen, das ist eine triviale Erweiterung
    von printf.



  • habs mit rb geöffnet, aber der strlen-Befehl funktioniert so nicht. Hast du da einen Schreibfehler drin? Hab nämlich alles Mögliche schon probiert



  • Natürlich die jeweils letzte Runde sollte eine ] sein.

    Hättste aber auch selber anhand der Compiler Meldung korrigieren können



  • So, jetzt funktioniert endlich alles - ich danke dir wie verrückt!!!



  • Das freut mich 😃 😃 😃 😃

    Ich glaube wir haben hier zusammen ein paar Methoden entwickelt, die dir bei der Programmierung helfen.
    Die Methoden haben den Vorteil, das man sie auf beliebige andere Probleme übertragen kann.

    P.S. Es ist erstaunlich wie SteinZeitDebugging helfen kann ("Einstreuen von printf statements in den Code um den aktuellen Zustand zu überwachen." Eine sinnvolle Erweiterung ist diese Debugausgaben in einem logfile zu speichern).

    Viel Spaß 🤡



  • Hi,

    wollte bloß nochmal fragen, ob ich die Liste jetzt auch sortieren könnte, zB einam lnach Name, dann mal nach Strasse usw!? Das sind ja nun alles Strings - kann man sie überhaupt sortieren? Wenn ja, was für einen Befehl nimmt man da?



  • natürlich.

    Primitivste ("nicht wertend gemeint") Lösung ist Erzeuge einen neuen Head Knoten
    suche das größte Element in der alten Liste trag dieses in die neue ein

    Strings auf größer kleiner vergleichen geht lexikalisch mit strcmp, stricmp, strnicmp, strncmp. Diese Funktionen gibts mit diesem oder ähnlichen Namen bei jedem Compiler aber nur strcmp ist meines Wissen Ansi

    stricmp vergleiche ohne auf groß kleinschreibung zu Achten
    strncmp vergleiche die ersten n zeichen zweier Strings
    strnicmp vergleiche case insensitiv dir ersten n Zeichen

    Mehr siehe Handbuch oder Hilfe



  • Ok, hört sich nicht so schwer an - danke dir!



  • Und noch was ... 😉

    kann ich atol auch für floatzahlen nehemen? Ich will nämlich eine Liste machen, wo ein float als zahl drin stehen soll. Wenn ich die Liste wieder lade, will ich dann trotzdem noch mit den zahlen rechnen können.



  • schu dir mal atof an


Anmelden zum Antworten