Autor Beitrag
$RumTobi$
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 17.11.07 16:57 
Ein Hallo an die Experten ...

Folgendes Problem:

Ich besitze eine unicodeformatierte Textdatei "beispiel.tmp"
Ich brauche zeilenweise Zugriff auf die Datei.

Früher als ich noch ansiformatioerte Textdateien hatte ging es noch so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm4.FormActivate(Sender: TObject);

var   Daten:   TextFile;
      s:       Double;

begin
      AssignFile(Daten,'beispiel.tmp');
      Reset(Daten);
      ReadLn(Daten,s);
      // ... irgendetwas mit s tun
      CloseFile(Daten);
end;


Wie bekomme ich das denn nun mit der oben beschriebenen unicodeformatierten Textdatei hin?
Ich benutze Delphi 7.

Vielen Dank
Bernhard Geyer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 721
Erhaltene Danke: 3



BeitragVerfasst: Sa 17.11.07 19:47 
Titel: Re: UNICODE formatierte Textdatei zeilenweise einlesen ReadL
user profile icon$RumTobi$ hat folgendes geschrieben:
Wie bekomme ich das denn nun mit der oben beschriebenen unicodeformatierten Textdatei hin?
Ich benutze Delphi 7.

Gar nicht mit Bordmitteln.
Entweder selbst machen, "Vorlagen" von der JclUnicode aus der Jedi verwenden oder das Unicode-Stringlist-Klassen des Elpacks oder der TNTWare-Controls
$RumTobi$ Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 18.11.07 01:50 
Titel: Re: UNICODE formatierte Textdatei zeilenweise einlesen ReadL
user profile iconBernhard Geyer hat folgendes geschrieben:
user profile icon$RumTobi$ hat folgendes geschrieben:
Wie bekomme ich das denn nun mit der oben beschriebenen unicodeformatierten Textdatei hin?
Ich benutze Delphi 7.

Gar nicht mit Bordmitteln.
Entweder selbst machen, "Vorlagen" von der JclUnicode aus der Jedi verwenden oder das Unicode-Stringlist-Klassen des Elpacks oder der TNTWare-Controls


Leider bin ich bei dem Versuch JclUnicode und TNTWare-Controls zu verstehen schon gescheitert ... Die ganze Thematik ist für mich doch ziemliches Neuland.

Gibt es denn keine "paar Zeilen" die auch ich verstehe um eine einzelne Zeile aus einer unicodierten Textdatei in einen "klassischen" String in Delphi 7 zu konvertieren ???

Ich hoffe noch immer auf die Hilfe der Experten ...
DANKE !!!
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: So 18.11.07 12:08 
Mike Lische hat auch eine Unicode Library veröffentlicht. In der ist auch eine TWideStringList enthalten. Mit dieser kannst du auch direkt eine ganze Datei einlesen. Es ginge zwar auch das direkt einzulesen allerdings wenn du so gar keine Ahnung davon hast ist es besser das andere machen zu lassen.

Das Konvertieren von einem UnicodeString in einen DelphiString geht ganz einfach in dem du einen WideString auf einen String zuweist oder aber auch mit der Methode WideCharLenToStrVar. Allerdings solltest du dir bewusst sein, dass beim Konvertieren höchstwahrscheinlich auch Daten verlohren gehen. Denn mit Unicode kannst du wesentlich mehr Zeichen ablegen als mit normalen AnsiStrings.

Unterstützend dazu solltest du dir evtl. mal folgendes anschauen.
de.wikipedia.org/wiki/Unicode

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
hathor
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 18.11.07 13:00 
@$RumTobi$:

Häng doch Deine Textdatei - oder wenigstens ein paar Zeilen - an Deine Frage ran.
$RumTobi$ Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 18.11.07 16:03 
user profile iconLossy eX hat folgendes geschrieben:
Mike Lische hat auch eine Unicode Library veröffentlicht. In der ist auch eine TWideStringList enthalten. Mit dieser kannst du auch direkt eine ganze Datei einlesen. Es ginge zwar auch das direkt einzulesen allerdings wenn du so gar keine Ahnung davon hast ist es besser das andere machen zu lassen.

Das Konvertieren von einem UnicodeString in einen DelphiString geht ganz einfach in dem du einen WideString auf einen String zuweist oder aber auch mit der Methode WideCharLenToStrVar. Allerdings solltest du dir bewusst sein, dass beim Konvertieren höchstwahrscheinlich auch Daten verlohren gehen. Denn mit Unicode kannst du wesentlich mehr Zeichen ablegen als mit normalen AnsiStrings.

Unterstützend dazu solltest du dir evtl. mal folgendes anschauen.
de.wikipedia.org/wiki/Unicode


So nun bin ich einen halben Sonntag weiter und das Ergebnis ist fast schon peinlich ...

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
unit Unit1;

interface

uses
  Windows,
  SysUtils,
  Dialogs,
  Controls,
  StdCtrls,
  Unicode ,
  Forms, Classes;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;


const
  TestFileSize = 10000000;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var tlist:TWideStringList;

begin
    tlist.Create;
    tlist.Clear;
    tlist.LoadFromFile('Federn.tmp');

    tlist.SaveToFile('Federn_save.tmp');
    tlist.Free;
end;

end.


Resultiert aber in der Zeile:
ausblenden Delphi-Quelltext
1:
    tlist.SaveToFile('Federn_save.tmp');					

in einer "Exception" --> EAccessViolation.
Scheinbar sollte ich doch nicht mehr programmieren ?!

Die einzulesende Textdatei habe ich mit hochgeladen ...
Vielleicht versteht das ja jemand und noch besser vielleicht kennt jemand auch noch ne Fehlerlösung ?!
Danke nochmal
Einloggen, um Attachments anzusehen!
$RumTobi$ Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 18.11.07 16:05 
nur zur Info :

die Datei "Federn.txt" heist natürlich "Federn.tmp"
jedoch erlaubt das Forum keine tmp-Dateien upzuloaden
Lossy eX
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1048
Erhaltene Danke: 4



BeitragVerfasst: So 18.11.07 16:34 
Versuch mal die Klasse folgendermaßen zu erstellen. Denn du hast derzeit keine sinnvolle Instanz erstellt.
ausblenden Delphi-Quelltext
1:
tlist := TWideStringList.Create;					


Außerdem sobald du die Datei mit der WideStringList wieder speicherst wird die resultierende Datei genau so Unicode enthalten wird wie die Quelldatei.

Wenn du jetzt auf einzelnen Zeilen zugreifen möchtest dann nimmst du dir die entsprechende Zeile aus der Liste und weist sie einem String zu. Sollte genügen. Mit diesem kannst du dann weiter arbeiten oder ihn abspeichern etc.

_________________
Nur die Menschheit ist arrogant genug, um zu glauben sie sei die einzige intelligente Lebensform im All. Wo nicht mal das nachhaltig bewiesen wurde.
$RumTobi$ Threadstarter
Hält's aus hier
Beiträge: 5



BeitragVerfasst: So 18.11.07 19:11 
VIELEN DANK ! Der Sonntag ist gerettet !
Vielleicht sollte ich och wieder öfters programmieren ... ;-)

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Unit1;

interface

uses
  Windows,
  SysUtils,
  Dialogs,
  Controls,
  StdCtrls,
  Unicode ,
  Forms, Classes;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var tlist:TWideStringList;
  i:integer;

begin
    tlist := TWideStringList.Create;
    tlist.Clear;
    tlist.LoadFromFile('Federn.tmp');
    for i := 0 to tlist.Count-1 do
    begin
      ShowMessage(tlist.Strings[i]);
    end;
    tlist.SaveToFile('Federn_save.tmp');
    tlist.Free;
end;

end.


DANKE nochmal !