Lux - Mi 09.03.05 10:33
Titel: Mein Programm stürzt unregelmäßig ab bei Zugriff auf Array
Hallo Leute.
Ist echt schwer einen passenden Titel zu finden :)
Also ich hab ein Programm, welches die Daten aus einer Liste auslesen soll.
Die Liste sieht so aus:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| L(PNAME,16) ENAME L(ANAME,33) ADAP DATUM UHRZEIT GWERT
BEHRENS. IRIS Begriffe dt. Varianten -999 16.11.2004 16:47:50 4.6667 BEHRENS. IRIS Begriffe dt. Varianten -999 22.11.2004 08:52:46 13.1667 BEHRENS. IRIS Begriffe dt. Varianten -999 23.11.2004 08:42:49 14.8333 BEHRENS. IRIS Begriffe dt. Varianten -999 09.12.2004 08:32:12 8.2500 BEHRENS. IRIS Begriffe dt. Varianten -999 13.12.2004 08:23:55 9.8333 BEHRENS. IRIS Begriffe dt. Varianten -999 14.12.2004 08:25:34 9.8333 BEHRENS. IRIS Bildarchiv b. Mauer free recall -999 25.11.2004 09:09:33 92.8571 BEHRENS. IRIS Bildarchiv b. Mauer free recall -999 26.11.2004 09:04:27 92.8571 BEHRENS. IRIS Bildarchiv b. Mauer free recall -999 29.11.2004 09:08:43 100.0000 BEHRENS. IRIS Bildarchiv b. Mauer free recall -999 30.11.2004 09:15:35 100.0000 |
Nun hab ich diese Liste in eine ListView reingeladen, was ja soweit auch noch super klappte.
Hier auch nochmal ein Dankeschön an das Forum, welches mir hierbei sehr geholfen hat.
Nun möchte ich allerdings hinter dem GWERT noch eine weitere Spalte machen mit dem Ergebnistext, da erscheint dann entweder "Fehler in Prozent" oder "Richtige in Prozent" oder "Pluspunkte pro Aufgabe" usw.
Dazu ist zu sagen, das die Liste aus einem anderen Programm kommt, wo insgesamt über 400 Aufgaben enthalten sind.
Nun habe ich das Problem so gelöst, dass ich ein Array erzeugt habe, was über 400 Bereiche hat (array [1..482, 1..4] of string)
erstellt habe und dort für jede Aufgabe den Ergebnistext und weitere Informationen gespeichert habe.
Wenn ich nun die Liste anzeigen möchte, dann durchsucht er bei jeder Zeile der Datei auch einmal das komplette Array.
Und wenn nun diese Datei über 200 Einträge hat, dann würde er 200 mal ein Array aufrufen, welches über 400 Einträge hat, die er durchsuchen muss.
Mein Problem: Seit ich das nun habe, stürzt das Programm mir unregelmäßig ab. Manchmal funktionierte es und manchmal nicht. Jetzt klappt es gar nicht mehr.
Meine Frage: Habt ihr eine Idee, wie man dieses durchsuchen optimieren kann?
Einige Infos noch dazu:
- Diese über 400 Aufgaben unterteilen sich noch einmal in verschiedene Bereiche (Mathe, Deutsch usw.)
- Nicht jede Aufgabe hat einen anderen Ergebnistext (Viele haben den Text Pluspunkte pro Aufgabe, andere wieder einen anderen)
- Zur Zeit läuft meine Suchabfrage so ab:
Delphi-Quelltext
1: 2: 3: 4: 5:
| for Counting = 0 to High(AAufgaben) do begin if x = AAufgaben[Counting, 2] then ergebnis := AAufgaben[counting, 3]; end; |
In X ist der name der Aufgabe enthalten
AAufgaben ist das Array
AAufgaben[Counting, 2] im 2 ist auch die Aufgabe enthalten
AAufgaben[Counting, 3] hier ist der Ergebnistext enthalten.
Ich hoffe ihr könnt mir ein paar Denkanstöße geben, wie ich das optimieren kann!
Vielen dank schonmal im Vorraus
Lossy eX - Mi 09.03.05 11:01
Ich würde anstelle des zweiten Array evtl. ein Record empfehlen. Dadurch ist es offensichtlicher auf welches Feld du zugreifst.
Ich denke mal dass die Namen recht gleich sind. Also laut deinem kleinen Text. Evtl könntest du dir auch einen kleinen Baum aufbauen in dem deine Einträge sortiert ablegst.
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| - BEHRENS. IRIS - Begriffe - dt. Varianten - Record welches die folgenden Werten beinhält '-999 16.11.2004 16:47:50 4.6667' - Record welches die folgenden Werten beinhält '-999 16.11.2004 16:47:50 4.6667' - Record welches die folgenden Werten beinhält '-999 16.11.2004 16:47:50 4.6667' - Record welches die folgenden Werten beinhält '-999 16.11.2004 16:47:50 4.6667' - Bildarchiv - b. Mauer free recall - Record welches die folgenden Werten beinhält '-999 16.11.2004 16:47:50 4.6667' - Record welches die folgenden Werten beinhält '-999 16.11.2004 16:47:50 4.6667' - Record welches die folgenden Werten beinhält '-999 16.11.2004 16:47:50 4.6667' - Record welches die folgenden Werten beinhält '-999 16.11.2004 16:47:50 4.6667' |
Dann könntest du recht schnell die Werte eingrenzen. Allerdings weiß ich nicht ob sich deine Daten da so einsortieren lassen und ob das einen Vorteil bringt.
Falls deine Namen 100%tig identisch sind könntest du auch ein
Hash [
http://www.dev-center.de/index.php?cat=header&file=hash] verwenden.