![]() |
Re: goto-befehl in delphi?
Zitat:
Delphi-Quellcode:
um nur ein Beispiel von vielen zu nehmen...
function TFields.FindField(const FieldName: string): TField;
var I: Integer; begin for I := 0 to FList.Count - 1 do begin Result := FList.Items[I]; if AnsiCompareText(Result.FFieldName, FieldName) = 0 then Exit; end; Result := nil; end; |
Re: goto-befehl in delphi?
:shock: Sowas:
Delphi-Quellcode:
geht auch so:
Start: //Label Start
readln(f,Daten); //Aus File in die Variable DATEN Zeile einlesen if not EOF(f) then if daten:='' then goto Start; //Daten ist leer, kein EOF also springe ich zu Start.
Delphi-Quellcode:
Greetz
Daten := '';
repeat readln(f, Daten); until EOF(f) or (Daten <> ''); alcaeus |
Re: goto-befehl in delphi?
@MKinzler
Du weichst vom Thema ab MKinzler! (ERMAHN!) :-D Meine Lösung scheint wohl OK zu sein. In Assembler gibt es ja auch Sprünge in dieser Art. Und ein EXIT, wenn in der Funktion das Result natürlich gesetzt wurde, bevor nochmals viele IF's abgearbeitet werden müssen verwende ich auch. In einer Procedure ebenso, wenn das Ergebnis erziehlt wurde. Ich setze GOTO und EXIT dann ein, um den Code nicht zu komplizieren. Break setze ich ungern ein. Geschmackssache eben, aber bevor ich eine umfangreiche Schleife mit 100.000 Durchläufen in den ersten 1000 Durchläufen beenden kann, könnte BREAK helfen. Manchmal ist es der Performance behilflich. @alcaeus Gute Lösung. Ich habe aber nicht nur ein Daten:="" sondern auch: ...lesen der Daten aus File
Delphi-Quellcode:
[edit]
Daten:=Trim(daten);
if daten[1]:='/' then goto Start; if Daten[1]:='#'then goto Start; if pos('C:\',daten) >0 then goto Start; Und hier stehen noch weiter Codes zum Verarbeiten des DATEN Strings, zum Beispiel showmessage('Daten: ',DATEN); etc... etc.. Und das soll ich in until EOF(f) or (Daten <> '').... packen? Ich mag es nicht so. Und meinen Fehler habe ich gesehen: if EOF(f) und nicht not EOF(f). Korrigiert, damit jemand es nicht falsch nachahmt. Und es stellt sich die Frage, was wirklich schneller ist. (Wahrscheinlich keines von beiden, weil der Compilercode wohl gleich ist.) [edit=alcaeus]Delphi-Tags eingefuegt ;) Mfg, alcaeus[/edit] |
Re: goto-befehl in delphi?
Ich hatte deinen Code als Witz aufgefasst, du meinst das also ernst? :o
Zitat:
Zitat:
BTW: Ein funktionierender Code ist noch lang kein guter Code. |
Re: goto-befehl in delphi?
@MKinzler
War ernst... :oops: Beispiel oben um realen Einsatz geändert. Sollte ich vielleicht CASE nehmen? |
Re: goto-befehl in delphi?
Dann solltest du dir norchmal die Grundlagen strukturierter Programmierung reinziehen.
[Edit] Zitat:
|
Re: goto-befehl in delphi?
@MKinzler
:warn: Ne, Spass beiseite. Also, nun muss ich es wohl doch mit GOTO lösen:
Delphi-Quellcode:
Muss ich nochmal die Grundlagen strukturierter Datenverarbeitung lesen?
Result:=False;
Daten:=''; repeat readln(f, Daten); Daten:=Trim(daten); if Daten:=chr(13)+Chr(10) then goto ENDE; // LF if Daten:='' then goto ENDE; //Leerraum if daten[1]:='/' then goto ENDE; //Kommentarzeile Daten[1]:='#'then goto ENDE; //Kommentarzeile pos('C:\',daten) >0 then goto ENDE; //Rootverzeichnis //Und hier stehen noch weitere Codes zum Verarbeiten des DATEN Strings showmessage(Daten); //Zum debuggen If pos('DEBUG',DATEN) >0 then //Die erste Verarbeitung... begin RESULT:=TRUE; //Wir haben ja etwas gültiges gefunden... //CODE hier end; // Hier stehen nochmals einige IF mit entsprechender Verarbeitung ENDE: until EOF(f); Verbessere bitte meinen Code. Wie kann ich es eleganter machen? Ich lerne gerne dazu, bzw. verbessere meinen Programmierstil (Ernst gemeint!) Und statt IF's CASE zu nehmen dürfte das "GOTO-Problem" auch nicht lösen. |
Re: goto-befehl in delphi?
:shock:
Bei ReadLn wird die Bedingung Daten = chr(13)+Chr(10) nie auftreten, da der Zeilenumbruch nicht zurück geliefert wird, sondern nur ein leerer String. Aber mal zum Wesentlichen:
Delphi-Quellcode:
Result := False;
repeat readln(f, Daten); Daten := Trim(daten); if Daten <> '' then if not (Daten[1] in ['/', '#']) then if Pos('C:\', Daten) = 0 then begin showmessage(Daten); //Zum debuggen If pos('DEBUG',DATEN) >0 then //Die erste Verarbeitung... begin RESULT:=TRUE; //Wir haben ja etwas gültiges gefunden... //CODE hier end; end; until EOF(f); Zitat:
...:cat:... |
Re: goto-befehl in delphi?
Zitat:
Delphi-Quellcode:
Result:=False;
Daten:=''; repeat readln(f, Daten); Daten:=Trim(daten); if (Daten=chr(13)+Chr(10)) or (Daten='') or (daten[1]='/') or (Daten[1]='#') or (pos('C:\',daten) >0) then begin // tue hier irgendwas // wenn nichts geschehen soll, lass diese Stelle // einfach leer, vielleicht brauchst Du es später // so wird gleich ersichtlich, dass nichts // geschehen soll, wenn diese Bedingung erfüllt ist end else begin //Und hier stehen noch weitere Codes zum Verarbeiten des DATEN Strings showmessage(Daten); If pos('DEBUG',DATEN) >0 then begin RESULT:=TRUE; //Wir haben ja etwas gültiges gefunden... //CODE hier end; // Hier stehen nochmals einige IF mit entsprechender Verarbeitung end; until EOF(f); |
Re: goto-befehl in delphi?
Zitat:
Bei den fehlen IFs und den := für Vegleiche kann ich es mir ja nicht so vorstellen :roll: CASE für die IFs wäre eh nicht möglich, da CASE in Delphi nur mit Ordinalen Typen klarkommt und denmach für die Auswerdung von Strings vollkommen (ohne Hilfsmittel zur Konvertierung) ungeeignet ist. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz