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
Antwort Antwort
Seite 2 von 2     12   
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#11
  Alt 2. Okt 2002, 19:56
Moin Hansa,

eine Konvertierungsroutine hab' ich Dir ja jetzt komplett geliefert
(letztes Posting)
Du brauchst jetzt nur noch ein Formular, einen OpenDialog und einen Button.

Das AnsiUpperCase einen Bug hat ist mir allerdings neu, und mangels intensiver Nutzung, auch noch nicht aufgefallen.

Da AnsiUpperCase auf der API CharUpperBuff (User32.dll) basiert, könnte man aus auch noch einmal mit der API CharUpper versuchen. Natürlich steht zu befürchten, dass die auch fehlerhaft arbeitet.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#12
  Alt 2. Okt 2002, 20: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
Daniel
(Co-Admin)

Registriert seit: 30. Mai 2002
Ort: Hamburg
13.920 Beiträge
 
Delphi 10.4 Sydney
 
#13
  Alt 2. Okt 2002, 20:42
Hallo Hansa,

Deine Bemerkung zur Variablen "Result" stimmt nicht ganz. Diese wird bei Funktionen von ObjectPascal implizit deklariert und wird als Rückgabewert einer Funktion genutzt:

Zitat von Die Delphi-Hilfe:
In addition, the function name itself acts as a special variable that holds the function’s return value, as does the predefined variable Result.
...
You can assign a value to Result or to the function name repeatedly within a statement block, as long as you assign only values that match the declared return type. When execution of the function terminates, whatever value was last assigned to Result or to the function name becomes the function’s return value.
Daniel R. Wolf
mit Grüßen aus Hamburg
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#14
  Alt 2. Okt 2002, 21:06
Hi,

hast ja Recht. Aber nur theoretisch. Durch sowas wird man schnell aufs Glatteis geführt und dann Gute Nacht! Ich jedenfalls versuche tunlichst solchen Sachen aus dem Wege zu gehen. Und dann noch so ein Allerweltswort!! Siehste, jetzt hab ich selber nicht daran gedacht.

Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#15
  Alt 3. Okt 2002, 00:01
Moin Hansa,

also Deiner letzen Ausführung vermag ich irgendwie nicht so recht zu folgen. Könntest Du das bitte mal näher erklären?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16
  Alt 3. Okt 2002, 00:10
Hi,

das mit dem Result, ich meinte, dann kann man ja gleich BEGIN oder END als Resultat zurückliefern. War das gemeint ?

Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#17
  Alt 3. Okt 2002, 01:48
Moin Hansa,

alles in allem hab' ich nicht verstanden, was Du bei Result für Probleme siehst.
Wie Daniel schon sagte ist diese Variable ja bei Funktionen automatisch vorhanden, und kann innerhalb der Funktion beliebig genutzt werden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 21:35 Uhr.
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