Springt nicht in die Schleife
Hallo liebe DP-Mitglieder,
ich hab da ein Problem. Und zwar bin ich gerade dabei einen Code zu schreiben, der Daten aus einer .txt-Datei auslesen soll und später in eine MySQL Datenbank schreibt. Momentan hängt es leider dadran, das er die unten aufgeführte if Bedingung zwar anläuft, aber nicht rein springt, obwohl die Bedingungen erfüllt sind :evil: Vor ca 1 Std lief das ganz noch :?: Wenn ich einen Haltepunkt setze, dann wird er Olivgrün (die werden im Code doch immer übersprungen, soweit ich weiß) Ich hoffe ihr könnte mir helfen. Benutze Delphi 7
Delphi-Quellcode:
P.S. Hoffe ihr habt alles, was ihr braucht :)
try
tmpS:= Copy(txt[I],1,4); tmpI:= StrToInt(Copy(txt[I],5,5)); if (tmpS = ' ') and (txt[I,10]= ' ') then begin CurrentDebNr:= tmpI; end; I:= I+1; Continue; except //Continue; end; |
AW: Springt nicht in die Schleife
Nicht ganz. Wo ist denn die besagte Schleife geblieben?
|
AW: Springt nicht in die Schleife
Sry. Ich meinte nicht Schleife, sondern die if Bedingung :oops:
|
AW: Springt nicht in die Schleife
Wenn der ursprüngliche String mindestens 5 Zeichen hat, wie kann tmpS dann aus nur einem Leerzeichen bestehen, wenn Du die ersten 4 Zeichen kopierst? Oder ist das ein Darstellungsfehler der DP?
|
AW: Springt nicht in die Schleife
Also mit der Farbenlehre hab ich es nicht so aber copy(irgendwas,1,4) ist im allg 4 Stellen lang dann ist der Vergleich auf ein Blank höchstwahrscheinlich immer falsch.
Ist aber Spekulation, da ich die Daten nicht kenne. Und vllt. ist es sinnvoll den Breakpoint vor "if" zu setzen, um auch mal zu kontrollieren was in den Variablen steht Gruß K-H |
AW: Springt nicht in die Schleife
Die Problematik mit der If-Schleife ist auf dieser Webseite erklärt:
http://www.if-schleife.de/ |
AW: Springt nicht in die Schleife
Zitat:
|
AW: Springt nicht in die Schleife
Zitat:
"Geändert von Timbuktu (Heute um 11:36 Uhr) Grund: Nicht Schleife, sondern if-Bedingung" |
AW: Springt nicht in die Schleife
Dann mal anders: wie sieht so eine Zeile in der Textdatei aus?
|
AW: Springt nicht in die Schleife
Zitat:
"_12345/1___________________1234_30.12.1899_____12_A_1____ _________1.234,56___________________1.234,56______ ____________________12" Und die, die ich mit diesem Code erkenne will ist dieser Datensatz: "____12345_ASDF_Movie_GMBH______________________1_ ____________________________123_456_78____________ ___________________" Leider werden in der DP die ganzen Leerzeichen weg genommen, weswegen ich diese mit "_" ersetzt habe und natürlich hab ich die Daten in willkürliche Daten umgeändert. |
AW: Springt nicht in die Schleife
Das sieht nach einer Datei mit fixer Spaltenlänge aus. Falls das zutrifft und Dir die Länge der einzelnen Felder bekannt ist, dann würde ich versuchen, die Zeile in ihre Bestandteile aufzuspalten und die einzelnen Felder im Anschluss zu trimmen.
|
AW: Springt nicht in die Schleife
Zitat:
|
AW: Springt nicht in die Schleife
Alles innerhalb derselben Datei? Wer denkt sich denn so einen Blödsinn aus? Hast Du eine Dokumentation zu den Formaten?
|
AW: Springt nicht in die Schleife
Wo ist denn die ursprüngliche Zuweisung von i?
|
AW: Springt nicht in die Schleife
Zitat:
Leider gibt es dort anscheinend keine Dokumentation zu. Ich hab mich schon mit dem Personal aus der Buchhaltung auseinander gesetzt um den Aufbau etwas zu verstehen. |
AW: Springt nicht in die Schleife
Zitat:
|
AW: Springt nicht in die Schleife
Welchen Typ hat eigentlich txt?
|
AW: Springt nicht in die Schleife
Zitat:
TStringArray = Array of String; |
AW: Springt nicht in die Schleife
Delphi-Quellcode:
Ich würde mal den Code etwas umschreiben und dann lässt sich der Inhalt von tmpS und tmpSX auch besser debuggen, somit auch die if-Bedingung
try
tmpline := txt[I]; tmpI:= StrToInt(Copy(tmpline,5,5)); tmpS:= Copy(tmpline],1,4); tmpSX := tmpline[10]; if (tmpS = ' ') and (tmpSX = ' ') then begin CurrentDebNr:= tmpI; end; I:= I+1; Continue; except //Continue; end; |
AW: Springt nicht in die Schleife
Acuh wenn es jetzt nicht besonders wichtig ist.
begin.. end kannst auch sparen. wenn nur eine zeile nach IF geschrieben wird.
Delphi-Quellcode:
gruss
if (tmpS = '') and (tmpSX = ' ') then
CurrentDebNr:= tmpI; |
AW: Springt nicht in die Schleife
Zitat:
@EWeiss: Danke für den Tipp. Bin aber noch nicht beim kürzen vom Code ^^ |
AW: Springt nicht in die Schleife
Zitat:
Zitat:
Sorry! Und du bist sicher das beide erfüllt sind? gruss |
AW: Springt nicht in die Schleife
Die Frage stelle ich mir auch. Wenn die Haltepunkte partout nicht wollen, mach doch einmal anderweitige Ausgaben (OutputDebugString, zur Not ShowMessage) und prüfe, ob da wirklich das drinsteht, was Deiner Meinung nach sollte.
|
AW: Springt nicht in die Schleife
Zitat:
Problem gelöst. Im Compiler hat sich der optimierer aufgehangen. Hab ihn jetzt ausgeschaltet, das ganz nochmal neu gestartet, die ganzen unnötigen Dateien aus dem Verzeichnis des Programmes gelöscht und siehe da, es funktioniert wieder. Trotzdem vielen Dank an alle :thumb: |
AW: Springt nicht in die Schleife
Zitat:
Wird nichts angezeigt wenn die bedingung gerade optimiert wird.. sehr schlecht beim debuggen. PS: Meine die Optimierung unter den Compiler Option ;) gruss |
AW: Springt nicht in die Schleife
Einen Tipp hätte ich noch zum Lösungsansatz: Statt mit copy und Stringvergleichen und dergleichen zu arbeiten, um solche Zeilen zu analysieren, ist es sehr viel einfacher, reguläre Ausdrücke zu verwenden. Die Komplexität des Programms reduziert sich damit auf einen Bruchteil.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:46 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