Hallo,
Ich versuche gerade in einem StringGrid eine Zelle auf ihren Inhalt zu prüfen..
Es sollen 3 Möglichkeiten geprüft werden:
Zelle ist leer
Zelle beinhaltet "simple"
Zelle beinhaltet "configurable"
Wie bekomme es hin daß man prüft "leer" ja - dann prüfe nächste Zelle und Fehlermeldung
Ist der String "simple" ja - nächste Zelle wenn
Nein!dann prüfe auf "configurable" passt eins von beiden dann okay ansonsten Fehlermeldung.
Aktuell prüfe ich es in einer For to Schleife..
Ich bekomme es nur hin erst auf Leer dann auf Simple und dann auf Configurable zu prüfen.. jedoch bekomme ich dann jeweils Fehlermeldung wenn der String nicht Simple ist aber Configurable und umgekehrt.
Grüße Sebastian
Mehrfache String Prüfung in Schleife
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Mehrfache String Prüfung in Schleife
Hi!
Lass Lazarus bzw. fpc die Arbeit machen .
Sei längerem gibt's ja auch case für strings.
Haben wir schließlich lang genug drauf gewartet.
Winni
Lass Lazarus bzw. fpc die Arbeit machen .
Sei längerem gibt's ja auch case für strings.
Haben wir schließlich lang genug drauf gewartet.
Code: Alles auswählen
var msg: string;
....
Case StringGrid.Cells[aCol, aRow] of
'' : msg := 'nix'
'simple' : msg := 'simple';
'configurable': msg := 'conf';
end; //case
showMessage (msg);
.....
-
- Beiträge: 6907
- Registriert: Do 2. Jan 2014, 17:21
- OS, Lazarus, FPC: Linux (die neusten Trunk)
- CPU-Target: 64Bit
- Wohnort: Schweiz
Re: Mehrfache String Prüfung in Schleife
Habe ich da etwas verpasst, das die auf einmal geht ?
So wie ich mich erinnern mag, ging die nur mit Char und Integern.
So wie ich mich erinnern mag, ging die nur mit Char und Integern.
Code: Alles auswählen
var
s: String;
begin
s := 'abc';
case s of
'': WriteLn('nix');
'simple': WriteLn('simple');
'abc': WriteLn('abc');
end;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot
Mit Java und C/C++ sehe ich rot
-
- Beiträge: 2118
- Registriert: Di 23. Sep 2014, 17:46
- OS, Lazarus, FPC: Win10 | Linux
- CPU-Target: x86_64
Re: Mehrfache String Prüfung in Schleife
Ja geht jetzt auch für Strings, aber nicht für andere typen (z.b. Double, auch wenn natürlich direkte Double vergleiche keinen Sinn machen). Ich bin natürlich kein FPC compiler entwickler, aber der grund (zumindest in C) warum nur ordinaltypen erlaubt sind, ist weil man damit die anweisung zu einer jumping table umbauen kann. Also:Mathias hat geschrieben:Habe ich da etwas verpasst, das die auf einmal geht ?
So wie ich mich erinnern mag, ging die nur mit Char und Integern.
Code: Alles auswählen
case i of:
1: //Code1;
2..3: //Code2;
5: //Code5;
end;
Code: Alles auswählen
caseArray: Array[1..5] of Pointer = [@Case1, @Case2, @Case2, nil, @Case5];
goto caseArray[i];
Case1:
//Code1
goto CaseEnd
Case2:
//Code2
goto CaseEnd
Case5:
//Code5
CaseEnd:
...
Daher können werte im case auch nur konstant sein.
Die Frage ist jetzt natürlich wie das im FPC mit strings umgesetzt wird. Es gibt zwei möglichkeiten, entweder das ist nur syntaktischer Zucker für ein If-Then-Else, in dem fall verstehe ich nicht warum es nur für strings geht und nicht für andere typen, oder es benutzt intern irgend eine schlaue datenstruktur wie eine vordefinierte Hashmap mit sprungaddressen, was zwar echt cool wäre, aber mir viel zu viel compiler magic wäre (ich weiß gerne was intern abgeht).
Auf jeden Fall kann mans aktuell für Strings benutzen, warum für andere Datentypen nicht, keine ahnung
- Winni
- Beiträge: 1577
- Registriert: Mo 2. Mär 2009, 16:45
- OS, Lazarus, FPC: Laz2.2.2, fpc 3.2.2
- CPU-Target: 64Bit
- Wohnort: Fast Dänemark
Re: Mehrfache String Prüfung in Schleife
Hi!
Case für strings geht seit fpc version 2.6. Das war so etwa 2012.
Geht nur im modus FPC und OBJFPC - also nicht in mode Delphi oder ISO.
30 Jahre hab ich drauf gewartet - es wurde auch Zeit.
Wie die Implementierung aussieht, weiß ich nicht.
Winni
Case für strings geht seit fpc version 2.6. Das war so etwa 2012.
Geht nur im modus FPC und OBJFPC - also nicht in mode Delphi oder ISO.
30 Jahre hab ich drauf gewartet - es wurde auch Zeit.
Wie die Implementierung aussieht, weiß ich nicht.
Winni