Delphi Prroblem mit Typisierten String Zeiger?

...komplette Frage anzeigen

3 Antworten

Da ist so viel falsch, dass man gar nicht weiß, wo man anfangen soll...

  • Die Prozedur istAlphanumerisch() müsste eine Funktion sein, sonst gibt es keinen Rückgabewert und der Aufruf "if .." wird misslingen.
  • Die Schleife "for zeichen := text" ist so nicht möglich. Die moderne Variante wäre "for zeichen in text do", die altmodische, bewährte Variante wäre "for AIndex := 1 to Length(text) do zeichen := text[Aindex]; ..."
  • Die letzte if-Anweisung funktioniert so nicht. Der Vergleichsoperator "<>" (ungleich muss zwischen sei Operanden stehen, also "(istZiffer <> False)". Kürzer und empfehlenswerter wäre aber natürlich, die booleschen Werte direkt zu nehmen: "if not istZiffer or not istBuchstabe then ..."
  • Die Variable "Ergebnis" ist nicht definiert. Wenn die Prozedur eine Funktion wäre, dann würde es die automatische Variable "Result" geben. Man könnte aber moderner die Funktion dann direkt verlassen: "then Exit(False)"
  • Als Variablentyp darf nicht "^string" angegeben werden, sondern es muss eifnach "string" heißen. Es gibt keinen Grund, hier einen Zeiger auf String zu übergeben.
  • Das Schlüsselwort "text" ist als Variablenname ungeeignet.
function isAlpha(AString: String): Boolean;
var c: Char;
begin
  for c in AString do if not (c in ['A'..'Z', '0'..'9']) then Exit(False);
  Result := True;
end;

Vielen Dank für die ausführliche Antwort, und die dazu aufgeführten Erklärungen.

1

Als Variablentyp darf nicht "^string" angegeben werden

Ich frage mich nur, warum? Nach den Syntaxregeln, die ich im Netz finde, sollte es eigentlich erlaubt sein.
(Dass es hier unsinnig ist, steht außer Frage.)

0

If <> istZiffer wird das problem sein. Desweiteren fehlen die deutschen umlaute und das neue ß.

Ja das stimmt, wollte jedoch erstmal das Programm ohne die zusätzlichen Sonderzeichen zum laufen bekommen.

0

Du definierst eine Prozedur ohne Rückgabewert. Für die if-Bedingung brauchst Du aber eine boolschen Ausdruck. Schreibe also:

procedure istAlphaNummerisch(const text: ^string) : boolean;

Der Rückgabewert wird in einer Prozedur durch Zuweisung an den Prozedurnamen gesetzt, also am Ende:

istAlphaNummerisch := ergebnis

(Bei der genauen Syntax dafür bin ich mir nicht sicher; alles schon zu lange her).

Ups: In Standard-Pascal hat eine Prozedur gar keinen Rückgabewert. function wäre hier das richtige Schlüsselwort für obige Deklaration.

1

Vielen Dank für die Erklärung mit den Rückgabewerten in einer Prozedur wusste nicht, dass das in Delphi so gehandhabt wird.
Jetzt gibt mir der Compiler noch den Fehler aus das er bei:

procedure istAlphaNummerisch(const text: ^string) : boolean;

einen Datentypen für text erwartet, ich ihm jedoch genau dahinter doch den Typen liefere in Form eines Zeigers?

Genaue Fehlermeldung: 'Type identifier expected'

0
@VyoZz

Keine Ahnung. Funktioniert's ohne den Pointer, also einfach (const text: string) ?

0

Was möchtest Du wissen?