Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Fastreport eine Textdatei laden (https://www.delphipraxis.net/179397-fastreport-eine-textdatei-laden.html)

Kostas 4. Mär 2014 19:53

Fastreport eine Textdatei laden
 
Hallo Zusammen,

unter Delphi5 konnte ich mit FastReport4 zur Laufzeit eine Textdatei in ein MemoView laden.
Die Textdatei enthält wirklich planen Text.

Exakt das gleiche funktioniert unter Delphi XE2 nicht mehr. Vermutlich wegen Unicode.
Schaue ich mir das Textfile mit Notepad an, ist alles in Ordnung. Lade ich den gleichen Text
in ein MemoView wie unten angezeigt, so sehe ich Chinesische Schriftzeichen.
Hat jemand eine Idee wie ich das umgehen kann?


Delphi-Quellcode:
procedure TfrmReport.frxReport1BeginDoc(Sender: TObject);
begin
  inherited;
  case aReportFormular of
    rfSEPALastschriftProtokoll: SetTextFileInMemoView('TextDatei',PrgPath+'\SEPA\ErgebnisLast.txt');
  end;
end;


{--------------------------------------------------------------------}
{}procedure TfrmReport.SetTextFileInMemoView(ObjectName,Datei:String);
{--------------------------------------------------------------------}
begin
  with TfrxMemoView(frxreport1.findobject( ObjectName )) do
  begin
    if FileExists(Datei) then
    begin
      Visible := true;
      Memo.clear;
      Memo.LoadFromFile(Datei);
    end;{if}
  end;{with}
end;{SetTextFileInMemoView}
Gruß Kostas

Kostas 4. Mär 2014 19:58

AW: Fastreport eine Textdatei laden
 
Sorry, habe die Lösung gefunden.

Den Text einfach vorher in ein TStringList laden dann gehts.

Delphi-Quellcode:
{--------------------------------------------------------------------}
{}procedure TfrmReport.SetTextFileInMemoView(ObjectName,Datei:String);
{--------------------------------------------------------------------}
var st:TStringList;
begin
  with TfrxMemoView(frxreport1.findobject( ObjectName )) do
  begin
    if FileExists(Datei) then
    begin
      Visible := true;
      st:=TStringList.Create;
      st.LoadFromFile(Datei);
      Memo.clear;
      Memo.Assign(st);
      st.Free;
    end;{if}
  end;{with}
end;{SetTextFileInMemoView}
Gruß Kostas

sx2008 4. Mär 2014 21:00

AW: Fastreport eine Textdatei laden
 
Das
Delphi-Quellcode:
Memo.Clear
kannst du dir übrigens schenken.
Und noch eine kleine Anmerkung zu deinem Kommentarstil.
Diese Kommentarlinien verbrauchen nur Zeit beim Tippen und bei jeder Änderung der Agumente bist du wieder dabei nutzlose Zeilen zu editieren.
Verwende diese Zeit lieber dazu ganz am Anfang der Unit mit wenigen Zeilen zu beschreiben worum es in der Unit geht.
Kommentierte End-Zeilen wie z.B.
Delphi-Quellcode:
end; {with}
sind ebenfalls Zeitverschwendung.
Besser man sorgt dafür dass Funktionen so klein sind dass man diese Hilfestellung nicht braucht.
Immer prüfen, ob man eine Funktion nicht zerlegen kann und Teile davon in weitere Funktionen auslagern kann.

Und noch ein Hinweis:
ich werde hier nicht weiter darüber diskutieren wie man Sourcecode kommentieren sollte.
Das führt nur zu langwierigen und fruchtlosen Diskussionen.
Ich gebe nur meine langjährigen Erfahrungen weiter und man kann diese annehmen oder auch nicht.
Vielleicht sind die Kommentarlinien auch von jemand anderem vorgegeben worden; ich weiß es nicht.
Meiner Erfahrung behindert es mehr als es bringt.


Delphi-Quellcode:
// lade Dateiinhalt in ein Memoview des Reports
procedure TfrmReport.SetTextFileInMemoView(const MemoName,Dateiname:String);
var
  st:TStringList;
begin
  with TfrxMemoView(frxreport1.FindObject( MemoName )) do
  begin
    if FileExists(Dateiname) then
    begin
      st:=TStringList.Create;
      try
        st.LoadFromFile(Datei);
        Memo.Assign(st);
      finally
        st.Free;
      end;
      Visible := true;
    end;
  end;
end;

Kostas 4. Mär 2014 22:03

AW: Fastreport eine Textdatei laden
 
Dankeschön für den Hinweis.
Das mit den Kommentaren ist so eine dumme Gewohnheit. Ich mache das so automatisch das ich es nicht merke.
In der Zeit überlege ich völlig andere Dinge. :-)
Das mit dem try finally ist natürlich Pflicht und hatte ich auch eingebaut. Ich wollte nur schnell posten damit
sich niemand unnötig mit dem Thread beschäftigt.

Nochmals herzlichen Dank für den Hinweis ich weis das sehr zu schätzen.
Dir noch eine schöne Zeit.

Gruß Kostas

himitsu 4. Mär 2014 22:14

AW: Fastreport eine Textdatei laden
 
Wirklich
Delphi-Quellcode:
Memo.LoadFromFile(Datei);
und nicht
Delphi-Quellcode:
Memo.Lines.LoadFromFile(Datei);



Hat da vielleicht jemand bei FastReport ein bissl "Mist" gebaut? (Fehlplanung)
(abgesehn davon, daß ein WideString nicht grade ein "optimales" Speichermanagement besitzt)


Zitat:

Delphi-Quellcode:
procedure TWideStrings.SaveToStream(Stream: TStream; Encoding: TEncoding);
var
  Buffer, Preamble: TBytes;
begin
  if Encoding = nil then
    Encoding := TEncoding.Unicode; // The default encoding is UTF-16

FastReport nutzt TWideStrings und nicht TStrings.
TWideStrings verwendet per Default Unicode und nicht ANSI, so wie das TStrings.

Resultat: Der Code ist nicht kompatibel. (oder hatten sie die Dateien vor D2009 wirklich schon als UTF-16 gespeichert?)

Lösung:
Delphi-Quellcode:
Memo.LoadFromFile(Datei, TEncoding.Default);



[edit]
OMG, das Property "Memo" ist das "Lines" ... also intuitiv ist was Anderes :wall:

Perlsau 4. Mär 2014 22:19

AW: Fastreport eine Textdatei laden
 
Zitat:

Zitat von sx2008 (Beitrag 1250642)
Und noch ein Hinweis: ich werde hier nicht weiter darüber diskutieren wie man Sourcecode kommentieren sollte. Das führt nur zu langwierigen und fruchtlosen Diskussionen. Ich gebe nur meine langjährigen Erfahrungen weiter und man kann diese annehmen oder auch nicht. Vielleicht sind die Kommentarlinien auch von jemand anderem vorgegeben worden; ich weiß es nicht. Meiner Erfahrung behindert es mehr als es bringt.

Liest sich wie: "Wenn hier jemand was über Kommentierung schreibt, dann ich und sonst keiner. Ich verbiete jedem anderen, diese Kommentierungsratschläge zu hinterfragen oder sonstwie zu kritisieren."

Was mich aber nicht abhalten wird, denn du hast hier nichts zu verbieten: Bei größeren verschachtelten Strukturen ist es allemal besser, das Ende eines Blocks zu kommentieren, als hinterher mühevoll hoch- und runterscrollen zu müssen, wenn man das Ende eines Blocks sucht.

himitsu 4. Mär 2014 22:25

AW: Fastreport eine Textdatei laden
 
Kommentierung hin und her ...

Das Einzige, was ich wirklich an dem Code hätte auszusetzen, ist der fehlende Resourcenschutzblock (Try-Finally)


Und ja, Assign macht intern quasi auch nochmal ein Clear, aber doppelt hält ja bekanntlich besser. :angel:

Sir Rufo 4. Mär 2014 23:48

AW: Fastreport eine Textdatei laden
 
Zitat:

Zitat von Perlsau (Beitrag 1250650)
Zitat:

Zitat von sx2008 (Beitrag 1250642)
Und noch ein Hinweis: ich werde hier nicht weiter darüber diskutieren wie man Sourcecode kommentieren sollte. Das führt nur zu langwierigen und fruchtlosen Diskussionen. Ich gebe nur meine langjährigen Erfahrungen weiter und man kann diese annehmen oder auch nicht. Vielleicht sind die Kommentarlinien auch von jemand anderem vorgegeben worden; ich weiß es nicht. Meiner Erfahrung behindert es mehr als es bringt.

Liest sich wie: "Wenn hier jemand was über Kommentierung schreibt, dann ich und sonst keiner. Ich verbiete jedem anderen, diese Kommentierungsratschläge zu hinterfragen oder sonstwie zu kritisieren."

Was mich aber nicht abhalten wird, denn du hast hier nichts zu verbieten: Bei größeren verschachtelten Strukturen ist es allemal besser, das Ende eines Blocks zu kommentieren, als hinterher mühevoll hoch- und runterscrollen zu müssen, wenn man das Ende eines Blocks sucht.

Wer hat hier wem was verboten?

Es ist nur ein Hinweis darauf, dass eine Diskussion über Kommentare wie, wann und wo in seinen Augen müßig ist und er sich daran nicht weiter beteiligen würde. Er gibt hier nur seine eigene Erfahrung wieder.

Mit keinem Wort wird dort irgendwem - noch nicht mal dir :mrgreen: - irgendwas verboten. Er weist nur darauf hin, dass er sich an einer potentiell aufkommenden KommentarWoWannWieUndWieOftDiskussion nicht beteiligen wird.

Warum man sich da jetzt persönlich angegriffen fühlt entzieht sich mir leider.

Versuch doch mal die Bürste nicht immer gegen den Strich zu ziehen :mrgreen:

Perlsau 5. Mär 2014 05:03

AW: Fastreport eine Textdatei laden
 
Frag doch mal andersrum: Wieso muß er das extra erwähnen, daß er keine Diskussion über seine ungebetenen Ratschläge wünscht? Er könnte Kritik oder Widerspruch ja auch unkommentiert stehen lassen, ohne extra zu betonen, daß er keine Diskussion darüber wünscht. In dem Fall würde sich keiner dran stören. Deshalb meine Formulierung "liest sich wie ...". Natürlich wird er es nicht wagen, hier explizit ein Verbot auszusprechen. Mein Kommentar ist eben meine Ansicht und entspricht meiner Erfahrung, die ich hier wohl genau so wiedergeben darf wie SX. Wenn ich etwas in irgend einer Form anstößig finde, dann sag ich das auch: Es steht ihm nicht zu, sich in einem Diskussionsforum Kommentare zu verbeten, denn das entspricht dem Wunsch, man möge es nicht gestatten, seine Kommentare zu kritisieren oder ihnen gar zu widersprechen. Dieser seltsame "Hinweis" ist reine Provokation, ansonsten macht er keinen Sinn.

Laßt doch die Leute ihre Kommentare in den Quelltext schreiben, wie sie lustig sind. Als ich damals mit Delphi bzw. mit Turbo Pascal anfing, hab ich erstmal auch sehr viel kommentiert, weil ich dann nicht immer wiederholt nachschlagen mußte, was denn dieser oder jener Befehl bedeutet. Schließlich war ich ja noch am Lernen. Heute, nach knapp 20 Jahren Pascal und über 10 Jahren Delphi kommentiere ich auch viel sparsamer, wenn ich das alleine entscheiden darf. Nicht wenige Auftraggeber schreiben jedoch vor, wie kommentiert und formatiert werden soll. Kürzlich verlangte sogar einer von mir durchgehend Großschreibung bei bestimmten Tokens: FUNCTION, PROCEDURE, BEGIN, END, FOR, TO, DO usw. sollten immer in Großbuchstaben geschrieben werden. Andere verlangen Kommentare, wo ich keine setzen würde, der eine besteht darauf, daß Kommentare immer in geschweifen Klammern stehen, der andere will unbedingt immer den Doppelslash. Was soll's, da würd' ich auch keine Diskussion mit dem Geldgeber anfangen. Ich hatte auch schon völlig unkommentierten Fremdcode zu bearbeiten, da verbringe ich erstmal ein paar Tage mit Testen und Kommentieren. Es gibt so viele unterschiedliche Aspekte des Kommentierens, daß es schon fast überheblich klingt, einem neuen Forenmitglied gleich mal die eigenen Kommentiergepflogenheiten in dieser fast schon autoritären Weise auf's Auge drücken zu müssen. Ohne diesen seltsamen Hinweis, der eigentlich besagt, "diskutiert wird darüber nicht", wäre das eher harmlos aufzufassen.

Aber hier, in einem Diskussionsforum zu verlangen, man möge von kritischen Äußerungen zu seinen Kommentargepflogenheiten absehen, ist dann schon ein starkes Stück. Mit anderen Worten: Es ist schon arg seltsam, einerseits Empfehlungen zur Kommentierung reinzuschreiben, gleichzeitig aber Diskussionen über Kommentierung als fruchtlos zu bezeichnen, und das alles nur, weil er meint, seine Kommentargepflogenheiten seien die einzig Wahren. Da brauch ich nicht gegen den Strich bürsten, da sträuben sich mir die Nackenhaare von ganz alleine :roll:

mkinzler 5. Mär 2014 05:10

AW: Fastreport eine Textdatei laden
 
Ist es eigentlich nicht mehr möglich einfach nur eine Frage zu beantworten ohne sich dann über unwichtige Kleinigkeiten in die Haare zu bekommen? :gruebel:

Furtbichler 5. Mär 2014 06:45

AW: Fastreport eine Textdatei laden
 
Stimmt (ich weiß, wovon ich rede :mrgreen:). Man hat einfach zuviel Zeit.

Aber um nochmal Feuer ins Gies zu ölen: Anstatt zu sagen 'Ich sag zu dem Thema nichts mehr' wäre es einfacher, einfach nichts zu dem Thema zu sagen. Andererseits: Wieso kann man nicht einfach mal Senf dazugeben aber mit der Bitte, diesen Senf heute mal nicht zu kommentieren. Ach ja, weil man Leute mit ihrem 20m langen und 5m breiten Schlips per se nicht verfehlen kann. Eine seltsame Mode, diese Riesenschlipse. :-D

Kostas 5. Mär 2014 09:12

AW: Fastreport eine Textdatei laden
 
Hallo Zusammen,

sorry dass der Thread so aus dem Ruder läuft :-(

Zur Sache wollte ich noch berichten, ich habe alle folgende Varianten nacheinander
ausprobiert doch ohne Erfolg. Ich sehe immer Chinesische Zeichen.
Es funktioniert nur über den Umweg einer TStringList.

Delphi-Quellcode:
...
with TfrxMemoView(frxreport1.findobject( ObjectName )) do
begin
  ...
  Lines.LoadFromFile(Datei);
  Lines.LoadFromFile(Datei, TEncoding.Default);
  Lines.LoadFromFile(Datei, TEncoding.ANSI);
  Lines.LoadFromFile(Datei, TEncoding.ASCII);
  Lines.LoadFromFile(Datei, TEncoding.BigEndianUnicode);
  Lines.LoadFromFile(Datei, TEncoding.Unicode);
  Lines.LoadFromFile(Datei, TEncoding.UTF7);
  Lines.LoadFromFile(Datei, TEncoding.UTF8);

  Memo.LoadFromFile(Datei);
  Memo.LoadFromFile(Datei, TEncoding.Default);
  Memo.LoadFromFile(Datei, TEncoding.ANSI);
  Memo.LoadFromFile(Datei, TEncoding.ASCII);
  Memo.LoadFromFile(Datei, TEncoding.BigEndianUnicode);
  Memo.LoadFromFile(Datei, TEncoding.Unicode);
  Memo.LoadFromFile(Datei, TEncoding.UTF7);
  Memo.LoadFromFile(Datei, TEncoding.UTF8);
  ...
end;
...
Gruß Kostas

mkinzler 5. Mär 2014 09:15

AW: Fastreport eine Textdatei laden
 
Zitat:

Anstatt zu sagen 'Ich sag zu dem Thema nichts mehr' wäre es einfacher, einfach nichts zu dem Thema zu sagen.
Gute Devise, aber leider gilt die ja nur für andere!

himitsu 5. Mär 2014 09:25

AW: Fastreport eine Textdatei laden
 
Zu dem Lines hatte ich grade noch was in meinem letzten Post geändert. (siehe das [edit] am Ende)

Aber grade sah ich das im Code.
Delphi-Quellcode:
    // analogue of Memo property
    property Lines: TWideStrings read FMemo write SetMemo;
Es geht also Lines und Memo. (ich würde dennoch zu Lines raten, denn das stimmt wenigstens mit der VCL ala TMemo überein, aber egal)



So wie der Code für XE aussieht, sollten diese Vier
Delphi-Quellcode:
  Lines.LoadFromFile(Datei, TEncoding.Default);
  Lines.LoadFromFile(Datei, TEncoding.ANSI);
  Memo.LoadFromFile(Datei, TEncoding.Default);
  Memo.LoadFromFile(Datei, TEncoding.ANSI);
funktionieren. (eher Default, für dem entsprechen Code wo früher die ANSI-Funktionen verwendet wurde)

Eine "aktuelle" FastReport-Version benutzt du aber?

Nja, wenn es dennoch nicht geht, dann hat da wirklich mal jemand richtig Mist gebaut. (bei FastReport oder Embarcadero)
Aber Hauptsache es gibt wenigstens eine funktionierende Lösung. :D

Kostas 5. Mär 2014 09:30

AW: Fastreport eine Textdatei laden
 
Ich verwende aktuell Fastreport Version 4.13.3
Werde ich gleich mal aktualisieren und danach nochmals testen.

Gruß Kostas

Daniel 5. Mär 2014 09:51

AW: Fastreport eine Textdatei laden
 
Die klassische Foren-Situation. Da stellt wer eine harmlose Frage und Dritte (!) bekommen sich wegen Nichtigkeiten in die Haare.
Fügt etwas inhaltliches zum Thema bei oder lasst es bitte bleiben. Nicht jedem Krumen (Kommentare) muss man aufpicken. Wirklich nicht.

Jumpy 5. Mär 2014 10:10

AW: Fastreport eine Textdatei laden
 
Nur mal doof zum Thema gefragt:

Zitat:

Lines.LoadFromFile(Datei, TEncoding.Default);
Lines.LoadFromFile(Datei, TEncoding.ANSI);
Lines.LoadFromFile(Datei, TEncoding.ASCII);
Lines.LoadFromFile(Datei, TEncoding.UTF8);
usw.
Ist es dabei nicht auch entscheidend, wie die Textdatei selber codiert ist? Die kann man doch z.B. mit Notepad++ oder so in beliebiger codierung speichern.

Bin da am Rande auch an dem Thema interessiert, weil ich mit D6 eine CGI für ein Web-Portal in HTML5 und daher UTF-8 erstellen soll, wo auch Textbausteine aus Dateien kommen. Aber auch Daten aus einer Datenbank (MS SQLServer) wo Charset der Felder noch irgendein Ascii ISO ist.

himitsu 5. Mär 2014 10:29

AW: Fastreport eine Textdatei laden
 
Wenn die Datei keine Codierungsinformationen enthält (bei textdateien das BOM), dann kann man versuchen die Bytes zu anlysieren (funktioniert aber nicht ganz sicher)
oder man verwendet ein Stantardformat.

Bei Textdateien gehen viele Windows-Programme von ANSI aus.
(z.B. bei XML ist es per Spezifikation überall UTF-8)

Das TWideStrings geht aber ohne Info (Vorgabe per Encoding-Parameter oder über ein vorhandenes BOM) einfach von UTF-16 aus, was beim "chinesisch" enden muß, wenn es vorher ANSI oder UTF-8 war.

TStrings/TStringList nimmt ohne Info daher CP_ACP also die ANSI-CodePage des Systems, damit der Code zu alten ANSI-Delphis (vor D2009) kompatibel bleibt.

Kostas 5. Mär 2014 10:35

AW: Fastreport eine Textdatei laden
 
Hallo Zusammen,

FastReport ist soeben aktualisiert worden in der Version 4.15.9 Doch leider ohne Erfolg.
Die Textdatei wird von einem fremden Tool generiert. Es ist das Inhaltsprotokoll einer SEPA XML-Datei.
Ich bin mir nicht sicher ob Notepad++ die aktuelle Codierung anzeigt. Die StatusBar zeigt
Dos\Windows ANSI und im Menu-Format ist der Punkt auf ANSI.

Gruß Kostas

himitsu 5. Mär 2014 10:44

AW: Fastreport eine Textdatei laden
 
Bei XML steht die eigentliche Codierung eigentlich in der XML-Processorinfo
XML-Code:
<?xml ... encoding="UTF-8"?>
.
Für reine Texteditoren sieht das dann aber eher wie ANSI aus, da XML kein BOM vorschreibt.

Und wenn nichts angegeben ist, dann ist es, wie schon erwähnt, immer UTF-8.
(außer bei Programmen die XMLs erstellen und sich nicht an die Spezifikation halten)

p80286 5. Mär 2014 10:49

AW: Fastreport eine Textdatei laden
 
Dann mach doch einen Hex-Dump, dann weiß man was man hat.

Gruß
K-H

Kostas 5. Mär 2014 10:52

AW: Fastreport eine Textdatei laden
 
Hallo Zusammen,

um jetzt nicht noch mehr Verwirrung rein zu erzeugen, die Textdatei ist nicht das XML-File welcher parallel dazu erzeugt
wird. Die Textdatei ich meine, ist eine reine Textdatei die alle Rechnungen auflistet die in dem XML-File enthalten sind.

Delphi-Quellcode:
---------------------------------------------------------------------------------------------------------
SEPA-PAKET-NR 46     - LASTSCHRIFTEN - PER 05.03.2014
---------------------------------------------------------------------------------------------------------
EMPFÄNGER-NAME                     BIC                 IBAN                                     BETRAG
AUFTRAGGEBER-NAME                  VERWENDUNGSZWECK 1
END-TO-END-ID                      VERWENDUNGSZWECK 2
---------------------------------------------------------------------------------------------------------
Gruß Kostas

Union 5. Mär 2014 11:11

AW: Fastreport eine Textdatei laden
 
Memo.Ansitext zuweisen?

Kostas 5. Mär 2014 11:16

AW: Fastreport eine Textdatei laden
 
Zitat:

Zitat von Union (Beitrag 1250703)
Memo.Ansitext zuweisen?

Die Eigenschaft Ansitext gibt es nicht bei Memo und auch nicht bei lines.

Union 5. Mär 2014 11:38

AW: Fastreport eine Textdatei laden
 
Zitat:

Zitat von Kostas (Beitrag 1250704)
Zitat:

Zitat von Union (Beitrag 1250703)
Memo.Ansitext zuweisen?

Die Eigenschaft Ansitext gibt es nicht bei Memo und auch nicht bei lines.

Seltsam, bie mir läuft folgender Code:

Delphi-Quellcode:
frComp := TfrxMemoView.Create(frBand);
frComp.Font.Charset := RUSSIAN_CHARSET;
// Unicode: &#1042;&#1080;&#1076;&#1080; &#1087;&#1086; &#1089;&#1087;&#1077;&#1094;&#1080;&#1092;&#1080;&#1082;&#1072;&#1094;&#1080;j&#1072; &#1085;&#1072; &#1086;&#1088;&#1080;&#1075;&#1080;&#1085;&#1072;&#1083;&#1085;&#1072;&#1090;&#1072; &#1072;&#1084;&#1073;&#1072;&#1083;&#1072;&#1078;&#1072;.
frComp.AnsiText := 'Âèäè ïî ñïåöèôèêàöèjà íà îðèãèíàëíàòà àìáàëàæà.'; // Siehe Angaben auf der Original-Verpackung

Kostas 5. Mär 2014 12:07

AW: Fastreport eine Textdatei laden
 
Du erzeugst das Objekt vermutlich im Reporter da du auf das Band Object als Owner angibst oder du holst es vorher.
Wenn das Objekt MemoView instanziiert wird, gibt es das Property "Ansitext"
Bei mir ist es so dass ich über den Designer ein Report erstelle und zur Laufzeit wenn der Event OnBeginDoc feuert
das MemoView über dessen Namen abfrage und das Textfile lade.

Delphi-Quellcode:
  with TfrxMemoView(frxreport1.findobject( ObjectName )) do
Innerhalb von With... ist das Property Ansitext nicht verfügbar. Das ist mir so auch noch nie begegnet.

Gruß Kostas

Union 5. Mär 2014 13:36

AW: Fastreport eine Textdatei laden
 
Das geht bei mir genauso:
Delphi-Quellcode:
TFrxMemoView(frxVbsLabel.FindComponent('qrlHerstell')).Ansitext := 'Ïðîèçâîäèòåë:' // &#1055;&#1088;&#1086;&#1080;&#1079;&#1074;&#1086;&#1076;&#1080;&#1090;&#1077;&#1083;: ;

Kostas 5. Mär 2014 13:52

AW: Fastreport eine Textdatei laden
 
Ah, jetzt habe ich verstanden. Wir reden aneinander vorbei.
Ansitext gibt es schon und ist vom Typ AnsiString. Dieser Typ hat keine Methode um direkt eine Datei zu laden
wie AnsiString.LoadFromFile. Deshalb muss ich über eine TStringList gehen. Das funktioniert auch einwandfrei.

Gruß Kostas

himitsu 5. Mär 2014 14:03

AW: Fastreport eine Textdatei laden
 
Delphi-Quellcode:
uses
  IOUtils;

TFrxMemoView(frxVbsLabel.FindComponent('qrlHerstell')).Text := TFile.ReadAllText('test.txt');

// oder
TFrxMemoView(frxVbsLabel.FindComponent('qrlHerstell')).Text := TFile.ReadAllText('test.txt', TEncoding.ANSI);

Kostas 5. Mär 2014 14:16

AW: Fastreport eine Textdatei laden
 
jo, jetzt funkts.

Fragt sich nur was ReadAllText macht, ich habe nicht nachgeschaut. :-)


Code:
procedure TfrmReport.SetTextFileInMemoView(ObjectName,Datei:String);
begin
  with TfrxMemoView(frxreport1.findobject( ObjectName )) do
  begin
    if FileExists(Datei) then
    begin
      Visible := true;
      AnsiText := TFile.ReadAllText(Datei, TEncoding.ANSI);
    end;
  end;
end;

Besten Dank an alle.
So werde ich es in Zukunft anwenden.
Gruß Kostas

himitsu 5. Mär 2014 14:58

AW: Fastreport eine Textdatei laden
 
TFile.ReadAllText gibt es natürlich als Unicode zurück (Result = String) und der Compiler sollte jetzt meckern, daß da eventuell ein Datenverlust eintreten könnte (UnicodeString => AnsiString).

Drum hatte ich auch einfach mal "blind" .Text verwendet, für die Zuweisung.

Im Prinzip macht er das Selbe, wie auch die TStringList beim Laden.
Die Datei in einen Puffer laden, Diesen via TEncoding decodieren und dann den UnicodeString an das Result übergeben.
(die TStringList zerlegt dann nur noch den UnicodeString in einzelne Zeilen)


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 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