Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem bei Umlauterkennung (https://www.delphipraxis.net/175335-problem-bei-umlauterkennung.html)

DerTester 13. Jun 2013 12:58

Delphi-Version: 5

Problem bei Umlauterkennung
 
So, erstmal sorry falls ich das ins falsche Unterforum gepackt habe.
Ich muss schulbedingt ein Programm erstellen, das Umlaute einer vom Benutzer eingegebenen Zeichenkette erkennt und sie ersetzt mit z.B. "ss" für "ß" oder "ae" für "ä".
Mit Delphi kenne ich mich auch noch nicht soooo gut aus, deshalb verzeiht mir bitte, wenn das Teil voller Fehler ist.

Hier ein Teil des Codes:
Code:
readln(eingabe);
i:=1;
dummy:='';
while i<=Length(eingabe) do begin
  if eingabe[i] = 'ß' then
    dummy:=dummy+'ss'
'ß' erkennt Delphi aber leider nicht, was kann ich statt 'ß' benutzen?
Danke im Voraus

DeddyH 13. Jun 2013 13:02

AW: Problem bei Umlauterkennung
 
Hast Du es einmal mit Delphi-Referenz durchsuchenStringReplace versucht? Ich mag kaum glauben, dass Delphi kein 'ß' erkennen soll, es sei denn, Du verwendest einen merkwürdigen Zeichensatz.

P.S.: Willkommen in der DP :dp:

[edit] Ach, Moment, ist das ein Konsolenprogramm? In dem Fall müsstest Du wohl auf die Win32-API zurückgreifen und OEMToCharBuff bzw. CharToOEMBuff einsetzen. Allerdings erscheint mir das für eine Schulaufgabe etwas happig. [/edit]

Der schöne Günther 13. Jun 2013 13:03

AW: Problem bei Umlauterkennung
 
readln? Gehen Umlaufe über die Windows-Konsole überhaupt?

DeddyH 13. Jun 2013 13:06

AW: Problem bei Umlauterkennung
 
Japp, siehe mein Edit.

DerTester 13. Jun 2013 13:14

AW: Problem bei Umlauterkennung
 
Es ist eine Konsolenanwendung (wir benutzen nur Konsolenanwendungen). Mein Lehrer hat uns 3 Aufgaben gegeben, diese hier ist laut ihm auf Grundkursniveau (11. Klasse), und solche Dinge wie OEMToCharBuf haben wir noch gar nicht durchgenommen, was bedeutet, dass wir solche Befehle noch gar nicht nutzen sollen (die Hausaufgaben beziehen sich nur auf das, was im Unterricht durchgenommen wurde), was widerrum zu der Erkenntnis führt, dass es noch einen anderen Weg geben muss (oder mein Lehrer hat einen Fehler gemacht).
Ich hab schon stundenlang das Internet durchforstet aber nichts gefunden, fällt Euch noch was ein?

DeddyH 13. Jun 2013 13:17

AW: Problem bei Umlauterkennung
 
Ein 'Ä' in der Konsole ist nun einmal kein 'Ä' an der GUI, wenn es keine Konvertierfunktion gibt, die mir bislang verborgen geblieben ist, dann dürfte es ohne die genannten Funktionen schwierig werden.

[edit] Nur mal zum Testen: funktioniert es hiermit?
Delphi-Quellcode:
uses
  ..., Windows;

function DosToAnsi(const InStr: AnsiString): AnsiString;
begin
  SetLength(Result, Length(InStr));
  OemToCharBuffA(PAnsiChar(InStr), PAnsiChar(Result), Length(InStr));
end;

function AnsiToDos(const InStr: AnsiString): AnsiString;
begin
  SetLength(Result, Length(InStr));
  CharToOemBuffA(PAnsiChar(InStr), PAnsiChar(Result), Length(InStr));
end;
Die Eingabe wandelst Du erst mit DosToAnsi um, arbeitest damit, und vor der Ausgabe wandelst Du mit AnsiToDos wieder zurück. [/edit]

Hansa 13. Jun 2013 13:27

AW: Problem bei Umlauterkennung
 
Wahrscheinlich soll er die Funktion selber schreiben. Stichworte hierzu wären deshalb FUNCTION und vor allem CASE. Guck da mal nach. Fertige Funktion poste ich aber jetzt nicht. :stupid:

DeddyH 13. Jun 2013 13:29

AW: Problem bei Umlauterkennung
 
Und was hat das jetzt damit zu tun, dass Delphi kein "Konsolen-Ä" erkennt?

nahpets 13. Jun 2013 13:35

AW: Problem bei Umlauterkennung
 
Zitat:

Zitat von Der schöne Günther (Beitrag 1218483)
readln? Gehen Umlaufe über die Windows-Konsole überhaupt?

Ja, aber dort hat man die OEM-Zeichensatz und Delphi nutzt Ansi.

Eine mögliche Lösung für das ß könnte so aussehen:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

var
  eingabe : String;
  dummy  : String;
  i      : Integer;
begin
  ReadLn(Eingabe);
  dummy := '';
  for i := 1 to Length(Eingabe) do begin
    case ord(Eingabe[i]) of
      225 : dummy := dummy + 'ss';
    else
      dummy := dummy + Eingabe[i];
    end;
    WriteLn(Eingabe[i],' = ',ord(Eingabe[i]));
  end;
  WriteLn(dummy);
  ReadLn;
end.
Die anderen Umlaute bitte selbst herausfinden (Sollte aber mit den paar Zeilen hier kein Problem sein.)

joachimd 13. Jun 2013 13:38

AW: Problem bei Umlauterkennung
 
früher, als es noch wenige fertige Funktionen gab, hat man erst einmal ein Programm geschrieben, welches den Zeichencode für einen Tastendruck ausgab. Da gab man dann alle komische Zeichen ein, schrieb den Code dazu auf und hat dann die Konvertierfunktion selbst zusamengebaut.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:27 Uhr.
Seite 1 von 2  1 2      

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