![]() |
Re: dunkelgrüner Breakpoint ?
Das ist es ja eben, mein richtiger Code ist genauso wie der Pseudocode, keine Probleme ersichtlich, worüber der Optimizer stolpern könnt. den richtigen Code anzuhängen, würde Euch und die Seitre überfordern, daher nur ein Ausschnitt, der repitorisch wiederholt wird
Delphi-Quellcode:
Mit diesem Programm wird der Inhalt aus einem File herausgefiltert. ... while (iStart < fmax) and (FeldNr<11) do begin addr:=''; addr:=addr+IntToHex(buff1[aStart],2); addr:=addr+IntToHex(buff1[aStart+1],2); addr:=addr+' '; addr:=addr+IntToHex(buff1[aStart+2],2); addr:=addr+IntToHex(buff1[aStart+3],2); if addr='FEFF 00E0' then begin if param in['a','p','f'] then begin j:=j+1; end; aStart:=aStart+8; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0800 1600' then begin if param in['a'] then begin j:=j+1; Plan.Inhalt1:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0800 1800' then begin if param in['a'] then begin j:=j+1; Plan.Inhalt2:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0800 2000' then begin if param in['a','p'] then begin j:=j+1; Plan.Inhalt3:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0800 3000' then begin if param in['a','p'] then begin j:=j+1; Plan.Inhalt4:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0800 3010' then begin if param in['a','p'] then begin j:=j+1; Plan.Inhalt5:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0800 5000' then begin if param in['a'] then begin j:=j+1; Plan.Inhalt6:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0800 6000' then begin if param in['a','p'] then begin j:=j+1; Plan.Inhalt7:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end ... ... ... else if addr='0C30 5100' then begin if param in['a'] then begin j:=j+1; Feld[FeldNr].Inhalt1:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0C30 4200' then begin if param in['a'] then begin j:=j+1; Feld[FeldNr].Inhalt2:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0C30 6A00' then begin if param in['a'] then begin j:=j+1; Feld[FeldNr].Inhalt3:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0C30 A000' then begin if param in['a'] then begin j:=j+1; Feld[FeldNr].Inhalt4:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0C30 0A00' then begin if param in['a'] then begin j:=j+1; Feld[FeldNr].Inhalt5:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0AC30 1800' then begin if param in['a'] then begin j:=j+1; Feld[FeldNr].Inhalt6:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else if addr='0AC30 2300' then begin if param in['a'] then begin j:=j+1; Feld[FeldNr].Inhalt7:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end else begin if param in['a'] then begin j:=j+1; Feld[FeldNr].Inhalt8:= Lesen(lStart,iStart,Lang); end else lang:= Laenge_bestimmen(lStart); aStart:=aStart+8+lang; lStart:=aStart+4; iStart:=aStart+8; end; end; ... Es sind etwa 170 else if Sequenzen. Die Variable j wird später als Zählergebnis gebraucht. Ich hoffe, Ihr könnt damit was anfangen Danke E. B. |
Re: dunkelgrüner Breakpoint ?
Es muss keine Probleme geben, damit optimiert wird. Es reicht, wenn sie einen besseren Weg kennt.
Es muss auch nicht immer ein fehlerhafter oder schlechter Code sein, wenn er wegoptimiert wird. In deinem Fall denke ich allerdings, dass ein case-Konstrukt besser wäre. |
Re: dunkelgrüner Breakpoint ?
Danke aber Case geht nur bei ordinalen Typen, welcher addr nicht ist.
Gruß E. B. |
Re: dunkelgrüner Breakpoint ?
Wenn ich das Richtig sehe sind das auch nur hexadezimale Zahlen als String verpackt.
Aber überhaupt mal zu den Funktionen. Seh ich das richtig, dass du überall haargenau das gleiche machst und sich nur der "Empfänger" für die lesen-Funktion ändert? Das ist aber auch etwas aufwändig. Kein Wunder, dass da die Compilermagic zuschlägt. Da solltest du dir ne Zuordnung zwischen addr und "Empfänger" überlegen, anhand derer du das richtige Ziel findest und dann nur an einer Stelle rechnen. |
Re: dunkelgrüner Breakpoint ?
Hallo EccoBravo!
Hast Du den fehlerhaft reagierenden Code vielleicht nicht direkt in Delphi eingetippt, sondern irgendwoher übernommen (Copy&Paste, Einlesen einer Fremddatei)? Dann kann es sein, daß die Zeilenwechsel nicht korrekt dargestellt sind. Unter Windows muß das #$0D#$0A sein - also CR und LF. Andere Systeme kommen mit CR oder LF alleine aus. Die Delphi-IDE zeigt das dann korrekt an, aber Compiler und Debugger funktionieren nicht richtig. Abhilfe: Die .PAS-Datei mal in Notpad einlesen und wieder abspeichern. Alternativ geht auch ein Mini-Programm, das die Datei in eine StringList einliest (LoadFromFile) und dann wieder speichert (SaveToFile). Irgendwie verstehe ich nicht, daß bisher niemand da drauf gekommen ist - das Problem taucht doch mindestens zweimal pro Monat auf! Gruß Dietmar Brüggendiek |
Re: dunkelgrüner Breakpoint ?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:12 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