Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Stringgrid durchsuchen klappt nicht (https://www.delphipraxis.net/87570-stringgrid-durchsuchen-klappt-nicht.html)

Peter_Cottbus 2. Mär 2007 11:59


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:
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;
Danke für die Hilfe, tipps reichen auch...

ibp 2. Mär 2007 12:15

Re: Stringgrid durchsuchen klappt nicht
 
erklär doch mal bitte regelkonforme eingaben!

AMD_prozessor 2. Mär 2007 12:22

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.

smudo 2. Mär 2007 12:39

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é

ibp 2. Mär 2007 13:38

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???

Peter_Cottbus 3. Mär 2007 15:35

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:

die stelle 0 ist schon mal verkehrt! dass muss schon die 1 sein, da an stelle 0 die länge des strings steht!
Das verwundert mich jetzt... denn wenn ich z.B. "copy(stringgrid1.cells[i,j],0,1)" in einem Editfeld anzeigen lasse, erscheint in meinem Fall wirklich das erste Zeichen der Zelle... wenn ich 1,1 mache, dann das zweite.

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 ^^)

IngoD7 3. Mär 2007 15:45

Re: Stringgrid durchsuchen klappt nicht
 
Zeile 6 deines Codeschnipsels:
Delphi-Quellcode:
IF NOT (ts='x') OR (ts='X') OR (ts='0') OR (ts='1')
Das heißt übersetzt:
Sobald ts nicht 'x' ist, ist die Eingabe nicht regelkonform.

Das meintest du bestimmt nicht so, oder?

thkerkmann 3. Mär 2007 16:14

Re: Stringgrid durchsuchen klappt nicht
 
Hi, ich denke er meint

Delphi-Quellcode:
IF NOT ( (ts='x') OR (ts='X') OR (ts='0') OR (ts='1') ) then
da fehlen die äusseren Klammern.

oder auch wenn ts ein char wäre
Delphi-Quellcode:
if NOT ts in ['x','X','0','1'] then
Gruss

Peter_Cottbus 3. Mär 2007 17:08

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.

IngoD7 3. Mär 2007 17:41

Re: Stringgrid durchsuchen klappt nicht
 
Zitat:

Zitat von Peter_Cottbus
Es lag tatsächlich daran, dass ich einfach mal bei dieser einen Abfrage die Gesamt-Klammern vergessen hab.

... was du schon gestern, 14:38h hättest merken können: :wink:

Zitat:

Zitat von ibp
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?



Alle Zeitangaben in WEZ +1. Es ist jetzt 15:51 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