AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit StringList.IndexOf(s)

Ein Thema von MikeC · begonnen am 1. Jan 2004 · letzter Beitrag vom 1. Jan 2004
Antwort Antwort
MikeC

Registriert seit: 30. Dez 2003
Ort: Home sweet home
11 Beiträge
 
#1

Problem mit StringList.IndexOf(s)

  Alt 1. Jan 2004, 16:44
Hi

ich habe eine Stringlist mit folgenden einträgen (format: "index: Eintrag"; nur für's bessere verständnis)
  • 0: Eintrag 1
    1: Eintrag 2
    2: Eintrag 3
    3: Eintrag 1
    4: Eintrag 4
    5: Eintrag 5
    ...

Wenn ich jetzt mit TStringList.IndexOf(s) den eintrag "Eintrag 1" finden will, komme ich zum Listenindex 0. Wie komme ich jetzt aber an den Listenindex 3 mit einfachen Mitteln dran? Klar, wenn ich weiß, wo überall "Eintrag 1" steht, kann ich mit ner for-schleife und ner case-anweisung durch rennen, aber wenn ich das jetzt nicht weiß (z.B. in fremd-listings), habe ich ein problem.

Kann mir da jemand helfen?

Greetz
Mike
Yesterday it worked, today it doesn't work - Windows is like that!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Problem mit StringList.IndexOf(s)

  Alt 1. Jan 2004, 16:45
Hilft trotzdem nur eine FOR-Schleife oder ähnliches

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
MikeC

Registriert seit: 30. Dez 2003
Ort: Home sweet home
11 Beiträge
 
#3

Re: Problem mit StringList.IndexOf(s)

  Alt 1. Jan 2004, 16:53
das könnte aber mit ner for-schleife auch extrem daneben gehen. angenommen, du hast einen quellcode und in diesem stück quellcode tauchen an unterschiedlichen stellen 2 identische zeilen auf, in beiden ist ein fehler.
weiterhin ist gegeben, dass der compiler mit 2 stringlists arbeitet, einer mit dem orginal-quelltext und mit einer anderen, in der der "bereinigte" quelltext gespeichert ist (also ohne leere zeilen). das compilieren soll im bereinigten quelltext stattfinden. woher weiß jetzt der compiler, dass die fehlerhafte zeile im quelltext mehrmals auftauch? und woher weiß er an welcher stelle diese im orginalquelltext (also version mit leeren zeilen) stehen? das geht doch nur über nen index, oder?
Yesterday it worked, today it doesn't work - Windows is like that!
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit StringList.IndexOf(s)

  Alt 1. Jan 2004, 16:55
Sorry, Du hast mich verloren. Was genau willst Du jetzt. Der Delphi-Compiler (als Beispiel) macht das imho nicht so umständlich wie Du es beschrieben hast.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
MikeC

Registriert seit: 30. Dez 2003
Ort: Home sweet home
11 Beiträge
 
#5

Re: Problem mit StringList.IndexOf(s)

  Alt 1. Jan 2004, 17:07
ok, sorry. ich beschriebe das problem nochmal

ich habe einen compiler, der mit 2 stringlists arbeitet. in der einen steht der quelltext, so wie der user ihn schriebt, in der anderen die bereinigte version, in der alle leeren zeilen gelöscht wurden (das erspart abfragen, ob die zeile leer ist oder nicht). jetzt taucht in irgendeiner zeile ein fehler auf und eben diese zeile taucht nocheinmal irgendwo anders im sourcecode auf (ob mit fehler oder nicht ist ja egal). der compiler soll jetzt eine fehlermeldung rausgeben, in der auch die zeile im programm enthalten ist. (also sowas wie "Error 1 (in line 19): "blablabla" "). da der compiler mit der bereinigten version vom source-code arbeitet, stellt sich die frage, woher weiß der compiler, wo er sich gerade im programm befindet? er könnte natürlich einfach die zeile aus der bereinigten version nehmen, nur bringt das dem user nix, weil die zeilenangabe dann nicht mehr mit seiner sourcecode-version übereinstimmt. also muss der compiler (meiner imho) nach auf einen index zurückgreifen, den er sich am besten aus der unbereinigten version von seinem quelltext holt. problem dabei: wenn in diesem quelltext eine zeile mehrfach auftritt, wird er nur den ersten eintrag erhalten, weil TStringlist.IndexOf(s) halt mal so arbeitet. Erare humanum est aber ich wüsste keine andere möglichkeit meinen bescheidenen kleinen compiler zu schreiben.
wie macht borland das denn?
Yesterday it worked, today it doesn't work - Windows is like that!
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Problem mit StringList.IndexOf(s)

  Alt 1. Jan 2004, 17:10
Du kannst in jedem Element einer Stringlist neben dem String noch ein Objekt speichern. Ein Objekt ist nichts anderes als ein Zeiger. Du könntest dort einen Zeiger auf die Originalzeile speichern.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
MikeC

Registriert seit: 30. Dez 2003
Ort: Home sweet home
11 Beiträge
 
#7

Re: Problem mit StringList.IndexOf(s)

  Alt 1. Jan 2004, 17:13
ich habe grade eine andere möglichkeit gefunden. Zugegeben umständlich aber sie funktioniert

ich definiere einen typ TIntegerlist und schreibe eine Funktion GetCodeLines(Searchline: string):TIntegerlist, die den sourcecode in der orginalversion durchrennt und mir alle einträge in der integerlist zurückgibt.
Yesterday it worked, today it doesn't work - Windows is like that!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz