AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Umlaute in Windows

Ein Thema von Hansa · begonnen am 2. Okt 2002 · letzter Beitrag vom 3. Okt 2002
 
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12
  Alt 2. Okt 2002, 19:29
Hi Chris,

tja, weiß auch nicht so recht. Manchmal sind Fehler da, obwohl angeblich keiner sie sieht oder es nicht zugibt. Bis ich bei Borland anrief habe ich lange in meinem Programm gesucht. Wäre heute noch dran.

Da ich ein Freund möglichst einfacher Dinge bin, ich meine jetzt beim Programmieren , habe ich erst mal die Spur von Daniel bis zum Ende verfolgt. Dein Spezialgebiet und auch das von Luckie ist mir ein Greuel.

Vorweg : das klappt so schon einwandfrei. Aber auch in Daniels Code sind zwei kleine Fehler. Die erkläre ich zum Schluß, weil sie vor allem Anfänger womöglich tagelang aufhalten. Muß ja nicht sein.

Hier nochmal der (modifizierte) Code :
Code:
function AnsiToIBMAscii(s: string): string;
var
  i: integer;
  Result : string;
begin
  Result := '';
  for i := 1 to Length(s) do
  begin
    case s[ii] of
      #196: Result := Result + #142; (* Ä *)
      #214: Result := Result + #153; (* Ö *)
      #220: Result := Result + #154; (* Ü *)
      #228: Result := Result + #132; (* ä *)
      #246: Result := Result + #148; (* ö *)
      #252: Result := Result + #129; (* ü *)
      #223: Result := Result + #225; (* ß *)
    else
      Result := Result + s[i];
    end;
  end;
  AnsiToIBMAscii := Result;
end;

function IBMAsciiToAnsi(s: string): string;
var
  i: integer;
  Result : string;
begin
  Result := '';
  for i := 1 to Length(s) do
  begin
    case s[ii] of
      #142: Result := Result + #196; (* Ä *)
      #153: Result := Result + #214; (* Ö *)
      #154: Result := Result + #220; (* Ü *)
      #132: Result := Result + #228; (* ä *)
      #148: Result := Result + #246; (* ö *)
      #129: Result := Result + #252; (* ü *)
      #225: Result := Result + #223; (* ß *)
    else
      Result := Result + s[i];
    end;
  end;
  IBMAsciiToAnsi := Result;
end;
Der erste Fehler ist mit bloßem Auge zu erkennen : Die Variable Result war in dem alten Code nicht innerhalb der Funktion deklariert. Wer die beiden Fu. also benutzt kriegt hoffentlich einen Compiler-Fehler. Nicht schlimm, aber wenn dieser Fehler NICHT kommt, dann ist die Var. globaler deklariert und da ihr ein Wert INNERHALB der Funktion zugewiesen wird, wird dieser somit "verbogen". Da ist Gefahr im Verzug.

Der zweite Fehler liegt in der FOR-Schleife. Die soll vom ERSTEN bis zum letzten Buchstaben des strings laufen. In der Ursprungsfassung fing sie aber bei 0 schon an. Dadurch wurde in meiner DB bei jedem string-Feld ein komisches 1. Zeichen eingefügt, das auch noch gleich war und das letzte wurde abgeschnitten (Platz für 30 Zeichen nicht 31 !). Das war das Längenbyte in s [0]. Das braucht man aber nicht mitzuschleppen, Da Result := '' am Anfang steht. Direkt darauf zugreifen sollte man sowieso nicht.

Gruß
Hansa
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz