Delphi ord funktion

Hey Leute,

und HIILLFFFEE !!!:0
ich arbeite gerade mit der Ord-Funktion, also Buchstaben zu ACII-Code:
So hier mein Problem ich möchte gerne von einem Text zum Beispiel nur die 'E’´s umwandeln
Also zum Beispiel in „EIN EIMER“.

Da hab ich die Formel
inhalt:=inttostr(ord(inhalt[1]+inhalt[5]))

Aber das funktioniert natürlich nicht. BITTE weis jmd. wie das funktioniert???

Das wär so super :wink:
Ein Tipp würde auch schon reichen.

Antitofuesser.

Hi,

Ich weiß zwar nicht genau worauf du hinaus willst aber mit inhal[1] holst du dir das erste zeichen von deinem string, das kannst du natürlich nicht zum 5. dazuaddieren. Du musst sie zuerst mit ord
in eine zahl umwandeln

Grüße

Hallo,

leider bin ich da auch im Moment etwas überfragt. Sorry.

Servus!
probiers mal damit
s:= ‚EIN EIMER‘;
a:= length(s);
for n:= 1 to a do
begin
if s[n] = ‚E‘ then ausgabestring:= ausgabestring+inttostr(ord(s[n])) //else … siehe unten
end;

Das Ergebnis = 696969 (3 ‚E‘)

mit
else ausgabestring:= ausgabestring+s[n];

bekommst Du ‚69IN 69IM69R‘

PiPa

Hi …

(erst mal, Du brauchst hier nicht betteln, man hilft Dir auch so). Investiere Deine Energie lieber in das präzisere Formulieren der Aufgabenstellung.

Dann grundlegend ein Tipp: das ist nicht das erste Posting von Dir wo Du mit Anfängerpropblemen zu Pascal/Delphi daherkommst. Das ist keine Schande, wir haben alle mal so begonnen. Aber wenn es darum geht, dass Du Dir hier die Hausaufgaben machen lassen willst (Deine Beispiele riechen ziemlich nach dem was mir mein Lehrer damals in den 80-ern abverlangt hat), dann tust Du Dir damit keinen guten Dienst.

inhalt:=inttostr(ord(inhalt[1]+inhalt[5]))

Zu Deiner Formel. Ich versuche mal, Dir die Denkfehler aufzuzeigen statt Dir die fertige Lösung aufzuzeigen.

Du hast richtig erkannt, dass Du den 1. und den 5. Buchstaben umwandeln musst. Der Rest ist falscher wie er nicht sein könnte (entschuldige die Kritik). Abgesehen davon würde jede Lösung die funktioniert immer nur den 1. und den 5. Buchstaben beackern können - grad wirklich schlau wäre das nicht. Aber bleiben wir mal bei Deiner Formel.

Lass es uns einzeln anschauen. Klammern löst man am Übersichtlichsten von innen nach außen auf. also beginnt es mal mit

Inhalt[1]. Das ergibt als Ergebnis ein Zeichen, sprich, einen Buchstaben, den 1. in diesem Fall.
Inhalt[5]. Das ergibt auch einen Buchstaben, den 5.

Dann versuchst Du, die beiden zusammenzuzählen. Boah. An sich sollte Dich der Computer mit einem groben Syntaxfehler abwatschen dafür. Zahlen kann man zusammenzählen, aber doch keine Buchstaben. 1 + 1 ist 2, gut, aber was ist ‚f‘ + ‚x‘? Nix. Seltsamer Weise hat Herr Nikolaus Wirth (–> Wikipedia) es aber seinerzeit für nützlich befunden, diesem sinnlosen Ausdruck einen künstlichen Sinn zu geben, und seither kann man Buchstaben in Pascal über das + Zeichen aneinanderreihen: ‚f‘ + ‚x‘ = ‚fx‘. Das ist nun aber absolut nicht das was Du wolltest, oder?

Wie dem auch sei, das Endergebnis Deiner verunglückten ‚+‘ Operation ist also eine Zeichenkette, computerdeutsch „String“ genannt. Den String mutest Du der inttostr Funktion zu. Per Definition und Sprachreferenz erwartet sich diese Funktion eine Zahl und wandelt sie in eine Zeichenkette um. Du stopfst aber eine Zeichenkette hinein, in der nicht mal eine Zahl steht. Grobes Foul,

und selbst wenns nicht so wäre, wärest Du auf dem Glatteis: Du wolltest formulieren:

Beackere das 1. und das 5. Zeichen"

und hast formuliert:

„Addiere die Werte des ersten und 5. Zeichens“

Aber das funktioniert natürlich nicht. BITTE weis jmd. wie das
funktioniert???

Ein Tipp würde auch schon reichen.

Tipp: Du brauchst eine Schleife. Oder Du verlässt den tugendhaften Weg des ANSI Pascals aus den 80-er Jahren des letzten Jahrtausends und gibst der StringReplace Funktion eine Chance (ein Buchstabe ist ein Sonderfall eines Strings, der eben nur ein Zeichen lang ist). Was günstiger wäre hängt davon ab, wie die gesamte Aufgabenstellung ausgesehen hat. Ersetze imemr das erste und 5. zeichen wenns ein e ist klingt jetzt nicht grad nach einer Aufgabenstellung, sondern eher nach einem Teil von etwas Größerem.

Und auch für die Lösung der Aufgaben die Du mit Worten formuliert hast (ersetze E’ durch ‚e‘) ist die ORD Funktion nicht im Geringsten nützlich. Die wäre erst im Spiel wenn Du die Aufgabenstellung etwas allgemeiner formulierst und z.B. alle Kleinbuchstaben in Großbuchstaben wandeln würdest, und dabei ausschließlich auf der längst veralteten ASCII Tabelle aufbauen wolltest (was im Falle länderspezifischer Sonderzeichen zu hanebüchenen Ergebnissen mit ebenso hanebüchenen Workarounds führt).

Das war ein Tipp :smile:

Jetzt Du.

Armin.

Du hast mehrere Denkfehler!

  1. Ord ist eine Funktion, die die Position des Elementes innerhalb des Typbereiches liefert.
  2. Dein Typbereich ist doch der String E = „EIN_EIMER“
    (mit oder ohne Leerzeichen, kann ich aus deiner Anfrage nicht erkennen).
  3. IntToStr ist eine Funktion die Integer-Zahlen, deine Variable Inhalt in „Zeichenketten“ verwandelt.
    Daher paßt in deinem Befehlsaufbau nichts richtig zu einander.
  4. Welchen Zweck hat die Umwandlung einer „bekannten“ Zeichenkette E in den ASCII - Zeichensatz für dich ?
    Delphi und Windows bevorzugen ANSI!

Zur Lösung deiner unklaren Zielstellung mußt du selbst tiefer graben (Delphi -Lehrbücher!!)

Hallo,

mir ist nicht ganz klar, was das Ziel ist, aber ich versuch’s mal.

Ich würde über einen String zeichenweise iterieren und den gewünschten Buchstaben abfragen. Die Funktion Ord gibt dir den ASCII-Wert eines Zeichens zurück. Wenn du diesen aber nur addierst, bevor du ihn wieder als String ausgeben lässt, kann schon etwas ungewolltes herauskommen.
Wichtig ist also, was gesucht wird.

gegrüßt!