AGB  ·  Datenschutz  ·  Impressum  







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

goto-befehl in delphi?

Ein Thema von toredo · begonnen am 24. Jul 2006 · letzter Beitrag vom 26. Jul 2006
Antwort Antwort
Seite 8 von 10   « Erste     678 910      
Peinhard

Registriert seit: 8. Jul 2006
152 Beiträge
 
#71

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 11:20
Zitat von mkinzler:
Eine Forschleife sollte man auch nicht abbrechen müssen, sonst würde ich halt ne while-Schleife nehmen mit den 2 Bedingungen.
Naja, die VCL ist jedenfalls voll davon:

Delphi-Quellcode:
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;
um nur ein Beispiel von vielen zu nehmen...
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#72

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 11:28
Sowas:
Delphi-Quellcode:
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.
geht auch so:

Delphi-Quellcode:
Daten := '';
repeat
  readln(f, Daten);
until EOF(f) or (Daten <> '');
Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#73

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 11:31
@MKinzler
Du weichst vom Thema ab MKinzler! (ERMAHN!)

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:
Daten:=Trim(daten);
if daten[1]:='/then goto Start;
if Daten[1]:='#'then goto Start;
if pos('C:\',daten) >0 then goto Start;
[edit]
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]
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#74

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 11:36
Ich hatte deinen Code als Witz aufgefasst, du meinst das also ernst?

Zitat:
in Assembler gibt es ja auch Sprünge in dieser Art.
Da der Prozessor keine strukturierten Elemente kennt.
Zitat:
Ich setze GOTO und EXIT dann ein, um den Code nicht zu komplizieren.
Wenn du ihn so einsetzt, wie in deinem Beispiel schon.

BTW: Ein funktionierender Code ist noch lang kein guter Code.
Markus Kinzler
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#75

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 11:41
@MKinzler
War ernst... Beispiel oben um realen Einsatz geändert.
Sollte ich vielleicht CASE nehmen?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#76

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 11:50
Dann solltest du dir norchmal die Grundlagen strukturierter Programmierung reinziehen.

[Edit]
Zitat:
Sollte ich vielleicht CASE nehmen?
Nein While oder Repeat; siehe auch Beitrag 72 von alcaeus [/edit]
Markus Kinzler
  Mit Zitat antworten Zitat
Go2EITS

Registriert seit: 25. Jun 2006
519 Beiträge
 
Delphi 7 Personal
 
#77

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 12:20
@MKinzler


Ne, Spass beiseite.
Also, nun muss ich es wohl doch mit GOTO lösen:
Delphi-Quellcode:
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);
Muss ich nochmal die Grundlagen strukturierter Datenverarbeitung lesen?
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.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

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

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 12:27


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:
Muss ich nochmal die Grundlagen strukturierter Datenverarbeitung lesen?
Ja

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Michael Habbe
Michael Habbe

Registriert seit: 10. Aug 2005
264 Beiträge
 
Turbo Delphi für Win32
 
#79

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 12:33
Zitat von Go2EITS:
Muss ich nochmal die Grundlagen strukturierter Datenverarbeitung lesen?
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.
Hallo, ich habe ihn mal überarbeitet. Du solltest gleiche Elemente zusammenfassen (hier mit or geschehen). Die Performance leidet nicht darunter, weil, wenn die erste Bedingung erfüllt wird, werden die anderen nicht mehr überprüft.
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);
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.168 Beiträge
 
Delphi 12 Athens
 
#80

Re: goto-befehl in delphi?

  Alt 26. Jul 2006, 12:35
Zitat von Go2EITS:
Delphi-Quellcode:
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);
Und statt IF's CASE zu nehmen dürfte das "GOTO-Problem" auch nicht lösen.
Und der Code läuft?

Bei den fehlen IFs und den := für Vegleiche kann ich es mir ja nicht so vorstellen

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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 8 von 10   « Erste     678 910      


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 12:29 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