Delphi-PRAXiS
Seite 1 von 4  1 23     Letzte »    

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:


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:48 Uhr.
Seite 1 von 4  1 23     Letzte »    

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