Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi 1-Byte-Char in BDS2010 (https://www.delphipraxis.net/166785-1-byte-char-bds2010.html)

Bummi 29. Feb 2012 09:06

AW: 1-Byte-Char in BDS2010
 
vielleicht willst Du die Funktion LoadFileWithEncoding verwenden ....

Delphi-Quellcode:
unit ConvertCodePage;
// 20120116 by Thomas Wassermann
interface
uses Classes,Sysutils;

Procedure ConverCodePage(Const fn:String; FromCP, ToCP:Integer);
Procedure LoadFileWithEncoding(const fn:String; CodePage:Integer;sl:TStringList);
Procedure SaveFileWithEncoding(const fn:String; CodePage:Integer;sl:TStringList);

implementation

Procedure LoadFileWithEncoding(const fn:String; CodePage:Integer;sl:TStringList);
var
  enc:TEncoding;
begin
   enc := TEncoding.GetEncoding(CodePage);
   try
   sl.LoadFromFile(fn,enc);
   finally
     enc.Free;
   end;
end;

Procedure SaveFileWithEncoding(const fn:String; CodePage:Integer;sl:TStringList);
var
  enc:TEncoding;
begin
   enc := TEncoding.GetEncoding(CodePage);
   try
   sl.SaveToFile(fn,enc);
   finally
     enc.Free;
   end;
end;

Procedure ConverCodePage(Const fn:String; FromCP, ToCP:Integer);
var
 sl : TStringList;
begin
  sl := TStringList.Create;
  LoadFileWithEncoding(fn, FromCP , sl);
  SaveFileWithEncoding(fn, ToCP  , sl);
  sl.Free;
end;


end

himitsu 29. Feb 2012 09:12

AW: 1-Byte-Char in BDS2010
 
Man kann dem AnsiString auch direkt die CodePage mitgeben, wobei Delphi dann (meistens) die gewünschte CodePage nutzt, wenn es automatisch konvertieren soll.

Delphi-Referenz durchsuchenSetAnsiString

Delphi-Referenz durchsuchenStringElementSize
Delphi-Referenz durchsuchenStringCodePage
Delphi-Referenz durchsuchenStringRefCount
Delphi-Referenz durchsuchenSetCodePage

Es gibt sogar ein
Delphi-Quellcode:
ReadLString(var t: TTextRec; var s: AnsiString; CodePage: Word);
, wobei ich nicht genau weiß, wie man das nutzt.
Theoretisch sollte es eine der internen Funktionen für Read und ReadLn sein.
Eventuell wird es ja automatisch genutzt, wenn man dem StringTyp die Codepage mitgibt, so wie z.B. die Codepage 65001 für den Delphi-Referenz durchsuchenUTF8String.
Delphi-Quellcode:
type
  UTF8String = type AnsiString(65001);
  OEMString = type AnsiString(850); // oder = type AnsiString(CP_OEMCP)

LeisureSuitLarry 29. Feb 2012 09:29

AW: 1-Byte-Char in BDS2010
 
Bummis Vorschlag klingt gut...
Kann aber erst später weiter machen...

Danke für Eure Hilfe!

Grüße
Manfred

DeddyH 29. Feb 2012 09:38

AW: 1-Byte-Char in BDS2010
 
@Bummi: wieso in Gottes Namen übergibst Du die Listen als Variablenparameter?

Bummi 29. Feb 2012 09:53

AW: 1-Byte-Char in BDS2010
 
@Deddy
war ein nicht endbereinigter Code, bei dem Ursprünglich wenn nicht assigned Stringlisten erzeugt wurden

DeddyH 29. Feb 2012 10:01

AW: 1-Byte-Char in BDS2010
 
Das macht in dem Zusammenhang aber auch keinen Sinn, was soll denn dann gespeichert werden? Naja, egal, das "var" weg (und vielleicht TStringlist durch TStrings ersetzen) und gut is ;)

Iwo Asnet 29. Feb 2012 10:25

AW: 1-Byte-Char in BDS2010
 
Zitat:

Zitat von DeddyH (Beitrag 1153621)
...und gut is ;)

Nen Class Helper draus machen und 'besser' is?

DeddyH 29. Feb 2012 10:26

AW: 1-Byte-Char in BDS2010
 
Class Helper für welche Klasse?

vagtler 29. Feb 2012 11:04

AW: 1-Byte-Char in BDS2010
 
Zitat:

Zitat von DeddyH (Beitrag 1153628)
Class Helper für welche Klasse?

Lass mal raten: TStrings? ;)

DeddyH 29. Feb 2012 13:00

AW: 1-Byte-Char in BDS2010
 
Wenn es sonst niemand macht:
Delphi-Quellcode:
type
  TStringsCodePageHelper = class helper for TStrings
  public
    procedure ConvertFileCodePage(const Filename: string; FromCP, ToCP: Integer);
    procedure LoadFileWithEncoding(const Filename: String; CodePage: Integer);
    procedure SaveFileWithEncoding(const Filename: String; CodePage: Integer);
  end;

procedure TStringsCodePageHelper.ConvertFileCodePage(const Filename: string; FromCP,
  ToCP: Integer);
begin
  LoadFileWithEncoding(Filename, FromCP);
  SaveFileWithEncoding(Filename, ToCP);
end;

procedure TStringsCodePageHelper.LoadFileWithEncoding(const Filename: String;
  CodePage: Integer);
var
  Encoding: TEncoding;
begin
  Encoding := TEncoding.GetEncoding(CodePage);
  try
    LoadFromFile(Filename, Encoding);
  finally
    Encoding.Free;
  end;
end;

procedure TStringsCodePageHelper.SaveFileWithEncoding(const Filename: String;
  CodePage: Integer);
var
  Encoding: TEncoding;
begin
  Encoding := TEncoding.GetEncoding(CodePage);
  try
    SaveToFile(Filename, Encoding);
  finally
    Encoding.Free;
  end;
end;
Vielleicht könnte man künftig den schlauen Worten dann aber auch selbst Taten folgen lassen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:08 Uhr.
Seite 2 von 3     12 3      

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