Wie Variable am besten anlegen



  • Hallo zusammen, ich bin ein richtiger Frischling hier und bemühe mich aller Regeln des Forums einzuhalten, sollte dem trotzdem einmal nicht so sein bitte Hinweis ich korrigiers dann gleich.
    Ich versuche momentan ein kleines Programm zu schreiben, das aufgrund einer eingegebenen Teilenummer eines Maschinenteils für bestimmte Intervalle dieses Nummernkreises jeweils zugewiesenen Text, z.B. Serviceinformationen ausgibt. Diese Intervalle können sich auch überschneiden, sodaß für eine Teilenummer mehrere solcher Serviceinformationen existieren.
    Mein Problem dabei, daß etwa 60 solcher Zahlenintervalle existieren und ich nicht 60 Variablen festlegen will. Mir geistert der Begriff array im Kopf herum, mein Kenntnisstand ist aber noch so gering, daß ich nicht mit Sicherheit behaupten kann ob das in meinem Fall das richtige ist.
    Ein anderer Ansatz wäre der zu sagen ich habe für Unter- und Obergrenze dieser Intervalle zwei Variablen, die aus einer Liste, in der die Zahlenwerte für Ober und Untergrenze mit zugehörigem Text stehen, durch eine Schleife immer neu belegt werden.
    Die Überprüfung ob meine Teilenummer in einem bestimmten Intervall liegt und bei ja oder nein dann den Text auszugeben und auch die Überprüfung ob es sich bei der eingegebenen Teilenummer um eine gültige handelt bekomme ich schon hin.
    Nur welche Struktur ich dem ganzen gebe, damit nacheinander die 60 Intervalle abgearbeitet werden macht mir Schwierigkeiten.
    Für einen hilfreichen Tip wäre ich sehr dankbar!
    Ich benutze den gcc-Compiler unter Linux und arbeite im Moment Schritt für Schritt das Buch "The C Programming Language" von Kernighan/Ritchie durch. Mein Kenntnisstand ist dementsprechend niedrig, ich habe vor längerer Zeit ein bißchen Basic und Pascal gemacht und bin jetzt eigentlich durch die Beschäftigung mit Linux auf die C-Programmierung in ANSI-C gekommen.
    Gruß Chris



  • Hi !
    Wie groß sind die Zahlenwerte der Intervalle ?
    Wie groß ist das größte Intervall ?
    Der schnellste Zugriff ist über einen direkten Index



  • Hallo Indexer, vielen Dank für die prompte Reaktion.
    Die Teilenummern liegen im Bereich von 7stelligen Ganzzahlen. Also z.B. 6.772.309, die Zählung beginnt allerdings nicht bei 1, sondern die für diesen Typ von Teil verfügbaren Nummern umspannen ein Intervall von ein paar Tausend Nummern. Die einzelnen Intervalle mit einem extra Text belegen bis maximal 1stelligen Tausenderbereich. Genau kann ichs nächste Woche sagen, hab die Unterlagen jetzt am Wochenende nicht greifbar.
    Gruß Chris



  • 60 Intervalle, das ist ja gut überschaubar.

    In welcher Form liegen deine Daten vor ( Intervalle, Serviceinformationen ) ?
    Wie wäre es mit sowas, als Ansatz.

    struct Data // Maschinenteil, was auch immer.
    {
    	unsigned von, bis; // Intervallgrenzen
    	char* ServiceInfos; // Text oder Dateiname.
    	//char ServiceInfos[INFO_MAXLEN]; // Dito, alternativ bei bekannter Maximallänge
    
    };
    


  • Hmm, da hab ich noch etwas daran zu knabbern. Da muß ich mir noch etwas Hintergrund anlesen, sonst erzähle ich hier nur Unfug.
    Was mir einleuchtet ist die Zusammenfassung der einzelnen Variablen die sich auf einen Datensatz beziehen mit "struct". Ich hab daran gedacht die Daten als jeweils eine Zeile in eine TXT- Datei zu schreiben (ich muß die leider alle eintippen), also Ober/Untergrenze, zugehöriger Text, Indexnummer. Damit könnte ich einen neu hinzukommenden Datensatz auch gut einpflegen.
    Der Begriff direkter Index sagt mir wenig, wohl deshalb weil das eher C++ als C ist.
    Gruß Chris



  • Die Daten direkt über einen Index anzusprechen meine ich so:
    struct Data data[6772309+1];
    6772309 ist die höchste, vorkommende Maschinennummer und gleichzeitig der höchste Index.
    Einen schnelleren Zugriff kenne ich nicht.
    Wahrscheinlich würde das ganze zu groß werden, je nachdem wie groß die Struktur ist und was dein Rechner und Compiler so hergibt.

    Hier gibts nen ähnlichen Fall, da sind die Intervalle IP Nummern.
    Es wurde das Halbierungssuchen eingesetzt.
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-211778-and-start-is-0.html

    Daten wie in deinem Fall, liest man i.d.R. gar nicht komplett in den Arbeitsspeicher ein.

    Bei großen Datenmengen programmiert man sich eine Schnittstelle zu einer Datenbank und ruft die Datensätze per SQL ab.
    Oder wenn man die Zeit und Lust hat, baut man sich ein Dateisystem, z.B. für eine Suche nach dem Hashverfahren.

    Für kleine Datenmengen tut es natürlich auch eine einfache, sequentielle Speicherung.


Anmelden zum Antworten