![]() |
Stringgrid durchsuchen klappt nicht
folgendes Problem.
Ich will einen Stringgrid durchsuchen, dessen Inhalte auseinander nehmen und auf standardtisierte Eingabe überprüfen. Da es sich um eine Turingtafel handelt, muss die eingabe x, zy, u entsprechen, was x, z, y und u sind, seht ihr ja im Programm. Problem dabei: es funktioniert einfach nicht, und ich hab partout keine Ahnung wo mein problem liegt. Fehlermeldungen liegen insofern vor, dass er als falsch ansieht was eigentlich richtig ist. der text:
Delphi-Quellcode:
Danke für die Hilfe, tipps reichen auch...
for i:=1 to (StrToInt(edit1.text)) do
begin for j:=1 to 3 do begin ts:=copy(stringgrid1.cells[i,j],0,1); IF NOT (ts='x') OR (ts='X') OR (ts='0') OR (ts='1') then begin showmessage('Die Eingabe "'+stringgrid1.Cells[i,j]+'" ist nicht regelkonform. Bitte überarbeiten.'); korrekt:=false; end; ts:=copy(stringgrid1.cells[i,j],3,1); IF NOT ((ts='z') OR (ts='Z')) AND (korrekt=true) then begin showmessage('Die Eingabe "'+stringgrid1.Cells[i,j]+'" ist nicht regelkonform. Bitte überarbeiten.'); korrekt:=false; end; ts:=copy(stringgrid1.cells[i,j],4,1); IF NOT ((ts='0') OR (ts='1') OR (ts='2') OR (ts='3') OR (ts='4') OR (ts='5') OR (ts='6') OR (ts='7') OR (ts='8') OR (ts='9')) AND (korrekt=true) then begin showmessage('Die Eingabe "'+stringgrid1.Cells[i,j]+'" ist nicht regelkonform. Bitte überarbeiten.'); korrekt:=false; end; ts:=copy(stringgrid1.cells[i,j],6,1); IF NOT ((ts='R') OR (ts='r') OR (ts='N') OR (ts='n') OR (ts='L') OR (ts='l')) AND (korrekt=true) then begin showmessage('Die Eingabe "'+stringgrid1.Cells[i,j]+'" ist nicht regelkonform. Bitte überarbeiten.'); korrekt:=false; end; end; end; |
Re: Stringgrid durchsuchen klappt nicht
erklär doch mal bitte regelkonforme eingaben!
|
Re: Stringgrid durchsuchen klappt nicht
Also Ich würde ja dafür nen Parser schreiben, der die richtigen Eingaben vorher prüft und nur, wenn richtig, in die Tabelle einträgt. Du könntest auch ein TMaskEdit nehmen und dort ne passende Eingabemaske vorgeben. Dann sparst Du Dir den Parser.
|
Re: Stringgrid durchsuchen klappt nicht
Hallo Peter_Cottbus - Grüße aus Cottbus nach Cottbus :hi:
Ich hab zwar noch nicht den Fehler gesehen, aber eine ganze Menge Optimierungsmöglichkeiten. Z.B. kannst du statt copy(stringgrid1.cells[i,j],3,1) kannst du auch direkt auf das Zeichen im String zugreifen mit stringgrid1.cells[i,j][1] Wenn du statt String Char verwendest, kannst du mit Sets arbeiten (Beispiel ts in ['1', '2', '3' ..]) Wenn du gleich den String auf Großschreibung setzt (Uppercase) sparst du dir die doppelte Abfrage (x und X, r und R usw.) Und wie schon geschrieben: Mach den Check gleich beim reinschreiben ins Grid René |
Re: Stringgrid durchsuchen klappt nicht
also du prüfst die stellen 0,3,4,6 des strings ab?
die stelle 0 ist schon mal verkehrt! dass muss schon die 1 sein, da an stelle 0 die länge des strings steht! nach deinem obigen code ist folgendes erlaubt... stelle 0 (eigentlich 1) nur die Eingabe 'x' stelle 3 alles ausser 'z','Z' stelle 4 alles ausser zahlen stelle 6 alles ausser 'R','r','N','n','L','l' ist das richtig so? wann wird korrekt=true gesetzt??? |
Re: Stringgrid durchsuchen klappt nicht
Also erstmal danke für die Hilfe :)
Korrekt wird vor dieser ganzen Prozedur des Überprüfens auf True gesetzt und sollte sich folglich nie verändern, wenn keiner der Fehler auftaucht. Den Stringgrid während der Eingabe zu überprüfen lass ich, weil es so gewollt ist, dass die Überprüfung erst bei Druck auf einen Button geschieht. Zitat:
Mir geht es jetzt ehrlich gesagt auch nicht darum das zu optimieren, mehr ging es mir darum auf eigene Weise und mit den bisherigen Grundkenntnissen die ich hab, so eine Prozedur zu schreiben. Wie immer folgt dann jedoch, dass die Prozedur theoretisch richtig ist, aber praktisch einfach nicht funktioniert, und ich weiß leider immernoch nicht warum. ^^ @ibp: Nein das ist nicht korrekt. ^^ Theoretisch sollte er etwas als falsch markieren, wenn er in den Zellen NICHT diese Inhalte findet. Also ist nicht alles erlaubt AUßER z, Z usw... sondern eben nur diese Zeichen. Wenn der Fehler wirklich nirgends wirklich zu finden ist, werd ich mir mal so eine Eingabemasken-Eingabe mal anschauen und aneignen, aber vielleicht sieht ja trotzdem noch jemand den winzigen Fehler, der irgendwo liegt. Ich versteh halt nicht warum das theoretisch eigentlich funktionieren müsste, aber praktisch eben nicht taugt. ^^ Danke weiterhin die Hilfe, sehr nette Community hier. :) (Grüße an alle Cottbuser übrigens ^^) |
Re: Stringgrid durchsuchen klappt nicht
Zeile 6 deines Codeschnipsels:
Delphi-Quellcode:
Das heißt übersetzt:
IF NOT (ts='x') OR (ts='X') OR (ts='0') OR (ts='1')
Sobald ts nicht 'x' ist, ist die Eingabe nicht regelkonform. Das meintest du bestimmt nicht so, oder? |
Re: Stringgrid durchsuchen klappt nicht
Hi, ich denke er meint
Delphi-Quellcode:
da fehlen die äusseren Klammern.
IF NOT ( (ts='x') OR (ts='X') OR (ts='0') OR (ts='1') ) then
oder auch wenn ts ein char wäre
Delphi-Quellcode:
Gruss
if NOT ts in ['x','X','0','1'] then
|
Re: Stringgrid durchsuchen klappt nicht
Ich danke euch vielmals.
Es lag tatsächlich daran, dass ich einfach mal bei dieser einen Abfrage die Gesamt-Klammern vergessen hab. Sorry für den vielen Aufwand und vielen dank nochmal. |
Re: Stringgrid durchsuchen klappt nicht
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:03 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