StringGrid erste Spalte auf Zahleninhalt überprüfen

Für Fragen von Einsteigern und Programmieranfängern...
aldi
Beiträge: 59
Registriert: Sa 26. Apr 2014, 14:03

StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von aldi »

Hallo,
möchte gerne im StringGrid die erste Spalte auf Zahleninhalt überprüfen.
Buchstaben sind ungültig !

wie kann ich dieses umsetzten?

Code: Alles auswählen

 
 if StringGrid1.Cells[1, StringGrid1.FixedRows] <>' ' then
   begin
      If not (Key in ['0'..'9', #8]) then
        Key := #0;
      end else begin
       Showmessage('TEST');
      end;   

Benutzeravatar
theo
Beiträge: 10867
Registriert: Mo 11. Sep 2006, 19:01

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von theo »

Ich möchte gerne Socken stricken, aber ROTE bitte.

Wie kann ich dies umsetzen?

Code: Alles auswählen

 
begin
Zimt; 
Fahrradschlauch;
Klopapier;
Kerzenständer;
end
:wink:

aldi
Beiträge: 59
Registriert: Sa 26. Apr 2014, 14:03

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von aldi »

würde dann aber auch rotes Klopapier nehmen! :)

wieso darf man hier unter (Einsteigerfragen) nicht verwirrte Fragen stellen?
ist doch extra für Einsteiger oder?
oder dürfen hier nur Profis Fragen stellen, oder unqualifizierte Kommentare von sich geben?

das ist doch keine Hilfestellung :(

Linkat
Lazarusforum e. V.
Beiträge: 559
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 3.4 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von Linkat »

Hallo aldi,
ich kann theo verstehen. Sein Beispiel ist treffend. Du wirfst einfach ein paar Brocken hin und erwartest, dass irgend jemand die Brocken ordnet und ergänzt.. Mit deinem Wissensstand könntest du dir sicher ein bischen mehr Mühe geben und das Beispiel ein bischen weiter entwickeln. Es gibt bestimmt einige die dir gerne helfen. Aber du musst schon ein bischen mehr Vorarbeit leisten.
So fehlt z.B. die Schleife oder wo wird der Variablen key ein Wert zugewiesen, .....

Bitte gib dir ein bischen mehr Mühe und schon wird dir auch geholfen.

Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

aldi
Beiträge: 59
Registriert: Sa 26. Apr 2014, 14:03

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von aldi »

Hallo Linkat,

habe einfach nur eine Frage gestellt, und etwas verwirrten Quelltext beigefügt.
Aus diesem Quelltext kann man doch etwas erkennen oder?
Beziehungsweise verstehen, in welche Richtung es gehen soll.

Linkat
Lazarusforum e. V.
Beiträge: 559
Registriert: So 10. Sep 2006, 23:24
OS, Lazarus, FPC: Linux Mint 22; Lazarus 3.4 FPC 3.2.2; RaspiOS
CPU-Target: AMD 64, ARM 64
Wohnort: nr Stuttgart

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von Linkat »

aldi,
das hat nichts mit Einsteigerfragen zu tun. Du musst dir als Hilfesuchender ein bischen mehr Mühe geben (ich bin auch sicher du kannst es). Es ist einfach zu aufwändig für die möglichen Helfer das Problem zu lösen. Du solltest vorher das Beispielprogramm so vorbereiten, dass nur noch eine Frage übrigbleibt, die dann sehr schnell beantwortet werden kann
Weiterhin viel Spass beim Programmieren mit Lazarus..

Gruß, Linkat
Linux Mint 21.3; Lazarus 3.4 FPC 3.2.2; RaspiOS

aldi
Beiträge: 59
Registriert: Sa 26. Apr 2014, 14:03

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von aldi »

So habe jetzt eine eigene Lösung gefunden :D
Leider ohne Eure Unterstützung :cry:

Code: Alles auswählen

 
function numbers(s : string) : boolean;
var
   i : Integer;
begin
result := false;
for i := 0 to length(s) do
if s[i] in ['0'..'9'] then
 begin
  result := true;
  break;
 end;
end;

Code: Alles auswählen

 
if numbers(StringGrid1.Cells [1, StringGrid1.FixedRows]) then begin
  showmessage('Die Eingabe beinhaltet Zahlen');
  end else begin
  showmessage('Die Eingabe beinhaltet keine Zahlen');
  end;         

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von Christian »

Stimmt schon selber denken is auch doof.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von mse »

aldi hat geschrieben:

Code: Alles auswählen

 
function numbers(s : string) : boolean;
var
   i : Integer;
begin
result := false;
for i := 0 to length(s) do
if s[i] in ['0'..'9'] then
 begin
  result := true;
  break;
 end;
end;
Da ist ein *böser* Fehler drin und vermutlich tut das Ding nicht was du möchtest.

aldi
Beiträge: 59
Registriert: Sa 26. Apr 2014, 14:03

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von aldi »

Hallo mse,

was für einen bösen Fehler meinst Du?
Soweit funktioniert aber alles!

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von Michl »

Mal abgesehen von den Fehlern, die Du in Deiner Schleife und Abfrage hast, ist die von Lösung von Dir nicht im ersten Post zu erahnen gewesen. Während Du dort vermutlich die gedrückten Tasten auswerten wolltest, ist die Lösung jetzt, einen schon eingegebenen String zu testen.

Für diese Aufgabe stellt die RTL diverse Methoden zur Verfügung: http://lazarus-ccr.sourceforge.net/docs ... dex-5.html
Noch als Hinweis: Pascal hat die schöne Eigenschaft, die Bezeichner meistens so zur Verfügung zu stellen, wie man spricht. D.h. für Dich z.B. "Versuche String in Integer umzuwandlen" -> "Try" heißt soviel wie "Versuche".

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von m.fuchs »

Machen wir doch mal ein kleines Beispielprogramm:

Code: Alles auswählen

var
  s: String;
 
begin
  s := 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
  if numbers(s) then
    WriteLn('numbers behauptet, dass s mindestens eine ziffer enthaelt')
  else
    WriteLn('numbers behauptet, dass s keine ziffer enthaelt');
  ReadLn;
end.
Was mag da für ein Ergebnis herauskommen?

Code: Alles auswählen

numbers behauptet, dass s mindestens eine ziffer enthaelt
:shock:

Woran liegt das? In Pascal ist ein String nicht Null-basiert, d.h. der erste Buchstabe steht in s[1]. In s[0] hingegen wird (in einigen Fällen) die Länge des Strings abgelegt. In diesem Falle ist er 52 Zeichen lange, es steht als 52 in s[0]. Das wiederum entspricht dem ASCII-Zeichen '4' und das findet deine Funktion, freut sich darüber und behauptet eine Ziffer gefunden zu haben. Du müsstet also bei 1 starten in deiner Schleife.

Bei der Gelegenheit kannst du die Funktion noch umbenennen, damit klar ist was sie tut. ContainsNumbers wäre zum Beispiele eine gute Idee.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von mse »

aldi hat geschrieben: was für einen bösen Fehler meinst Du?
Wie m.fuchs bereits geschrieben hat beginnt die Indizierung bei Strings bei 1 und nicht bei 0. Bei 0 liegt ein interner Bereich.
Soweit funktioniert aber alles!
aldi hat geschrieben: möchte gerne im StringGrid die erste Spalte auf Zahleninhalt überprüfen.
Buchstaben sind ungültig !
Diese Forderung erfüllt deine Implementierung nicht.

Komoluna
Beiträge: 565
Registriert: So 26. Aug 2012, 09:03
OS, Lazarus, FPC: Windows(10), Linux(Arch)
CPU-Target: 64Bit

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von Komoluna »

Du gehst alle Zeichen durch, und fragst ab, ob es eine Ziffer ist. Wenn ja, dann beende die Funktion und gibt True zurück...

Also, wenn als String "30 Ziegen" eingegeben wird, erkennt deine Funktion das als Zahl an.

Da wir hier normalerweise keine Fertigen Ergebnisse liefern, schreibe ich mal Pseudocode:

Code: Alles auswählen

Setze Ergebnis auf True
Für jedes Zeichen von s tue:
  Wenn sich das Zeichen in dem Set ['0'..'9'] befindet, dann
    gehe zum nächsten Zeichen
  sonst
    Setze Ergebnis auf False
    Beende die Schleife
(In Pascal umgewandelt müsste er genau das machen, was du möchtest)

MFG

Komoluna
Programmer: A device to convert coffee into software.

Rekursion: siehe Rekursion.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: StringGrid erste Spalte auf Zahleninhalt überprüfen

Beitrag von m.fuchs »

Wobei ich (außer zu Ausbildungszwecken) nicht so eine Funktion selber entwickeln würde. Dazu gibt es ja passendes in der RTL. Der Hinweis von Michl hilft dann weiter.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Antworten