Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi Zeilenumbruch eines memofeldes in einer xml datei.... (https://www.delphipraxis.net/43965-zeilenumbruch-eines-memofeldes-einer-xml-datei.html)

Tigermoon 11. Apr 2005 13:21


Zeilenumbruch eines memofeldes in einer xml datei....
 
... speichern und wieder anzeigen

frage ist? wie mache ich das? :cry:
bekomme immer nur ein kästchen zurück

könnte mir da mal bitte jemand weiterhelfen?
BITTE :cry:

Steffi

sakura 11. Apr 2005 13:24

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
Da Du jetzt nicht gesagt hast, welchen XML-DOM Du nutzt, kann ich Dir auch nur eine grobe Antwort geben: nutze eine CDATA Sektion zum Speichern von Daten, wo auch die exakten "Leerzeichen" wichtig sind ;)

...:cat:...

Tigermoon 11. Apr 2005 13:35

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
habe keine ahnung was du mit dom meinst

Also ich verwende das folgender masen

Memofelder in Datei speichern

Delphi-Quellcode:
 
{ Inhalt der XML Datei auf einer Variable erstellen }
  xml_code :=  '<?xml version="1.0" encoding="UTF-8"?>'+slinebreak
                +'<WOCHENBERICHT>'+slinebreak
                +'<KW>'+kalender_wochen_auswahl+'</KW>'+slinebreak
                +'<JAHR>'+jahres_auswahl+'</JAHR>'+slinebreak
                +'<EINTRAEGE>'+slinebreak
                +'<MONTAG>'+AnsiToUtf8(Hauptmenu.montag_text.Text)+'</MONTAG>'+slinebreak
                +'<DIENSTAG>'+AnsiToUtf8(Hauptmenu.dienstag_text.Text)+'</DIENSTAG>'+slinebreak
                +'<MITTWOCH>'+AnsiToUtf8(Hauptmenu.mittwoch_text.Text)+'</MITTWOCH>'+slinebreak
                +'<DONNERSTAG>'+AnsiToUtf8(Hauptmenu.donnerstag_text.Text)+'</DONNERSTAG>'+slinebreak
                +'<FREITAG>'+AnsiToUtf8(Hauptmenu.freitag_text.Text)+'</FREITAG>'+slinebreak
                +'</EINTRAEGE>'+slinebreak
                +'</WOCHENBERICHT>';

  { Dateierzeugung }
  AssignFile(MyFile, dateiname_speichern );
  ReWrite(MyFile);
  { Inhalt der Variable in die Textdatei schreiben }
  WriteLn(MyFile, xml_code );
  CloseFile(MyFile);
Ausgabe der Datei

Delphi-Quellcode:
  if(FileExists(dateiname_laden))
  then begin

    XML_File := newXMLDocument;
    XML_File.LoadFromFile(dateiname_laden);

    Hauptmenu.montag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MONTAG'].Text;
    Hauptmenu.dienstag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DIENSTAG'].Text;
    Hauptmenu.mittwoch_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MITTWOCH'].Text;
    Hauptmenu.donnerstag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DONNERSTAG'].Text;
    Hauptmenu.freitag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['FREITAG'].Text;

  end;

  if not(FileExists(dateiname_laden))
  then begin
    Hauptmenu.montag_text.Text := '';
    Hauptmenu.dienstag_text.Text := '';
    Hauptmenu.mittwoch_text.Text := '';
    Hauptmenu.donnerstag_text.Text := '';
    Hauptmenu.freitag_text.Text := '';
  end

MathiasSimmack 11. Apr 2005 14:39

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
Wie sakura schrieb: Nimm eine CDATA-Sektion, so dass die Datei bspw. so aussieht:
XML-Code:
<knoten>
  <![CDATA[<?xml version="1.0"?>
<einknoten>
  <einUnterknoten/>
</einknoten>]]>
</knoten>
So bleibt nicht nur der XML-Code intakt (weil er als solcher nicht geparst wird), sondern auch Zeilenumbrüche bleiben erhalten.

Üblicherweise kommst du beim Erzeugen der XML-Datei mit einem vernünftigen Parser (ja ja, ich weiß schon: Was ist ein Parser? :roll:) viel besser weg. Oft genutzt: Hier im Forum suchenMS XML.

Tigermoon 13. Apr 2005 12:56

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
Jetzt wird es in zeilen gespeichert aber nicht in zeilen ausgelesen

Tigermoon 13. Apr 2005 12:57

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
BITTE BITTE

der der eine idee hat bitte melden

verzweifele noch

MathiasSimmack 13. Apr 2005 13:29

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
Hast du irgendwas an deiner Funktion verändert? Oder nimmst du jetzt gar einen XML-Parser? Deine Verzweiflung will ich ja gar nicht anzweifeln, aber mit etwas mehr Informationen zu den Dingen, die du inzwischen gemacht hast, klappt´s auch mit der Hilfe besser.

Tigermoon 13. Apr 2005 14:23

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
ok
hier der jetztige quellcode meiner datei und wie ich sie erstelle

Delphi-Quellcode:
  { Inhalt der XML Datei auf einer Variable erstellen }
  xml_code :=  '<?xml version="1.0" encoding="UTF-8"?>'+slinebreak
                +'<WOCHENBERICHT>'+slinebreak
                +'<KW>'+kalender_wochen_auswahl+'</KW>'+slinebreak
                +'<JAHR>'+jahres_auswahl+'</JAHR>'+slinebreak
                +'<EINTRAEGE>'+slinebreak
                +'<MONTAG><![CDATA['+AnsiToUtf8(Hauptmenu.montag_text.Text)+']]></MONTAG>'+slinebreak
                +'<DIENSTAG><![CDATA['+AnsiToUtf8(Hauptmenu.dienstag_text.Text)+']]></DIENSTAG>'+slinebreak
                +'<MITTWOCH><![CDATA['+AnsiToUtf8(Hauptmenu.mittwoch_text.Text)+']]></MITTWOCH>'+slinebreak
                +'<DONNERSTAG><![CDATA['+AnsiToUtf8(Hauptmenu.donnerstag_text.Text)+']]></DONNERSTAG>'+slinebreak
                +'<FREITAG><![CDATA['+AnsiToUtf8(Hauptmenu.freitag_text.Text)+']]></FREITAG>'+slinebreak
                +'</EINTRAEGE>'+slinebreak
                +'</WOCHENBERICHT>';

  { Dateierzeugung }
  AssignFile(MyFile, dateiname_speichern );
  ReWrite(MyFile);
  { Inhalt der Variable in die Textdatei schreiben }
  WriteLn(MyFile, xml_code );
  CloseFile(MyFile);
und hier der quellcode zum auslesen der datei

Delphi-Quellcode:
  { wenn eine Datei exsistiert werden die Dateifelder mit deren Daten gefüllt }
  if(FileExists(dateiname_laden))
  then begin

    // Anlegen eines Objektes zum Auslesen
    XML_File := newXMLDocument;
    // Datei laden
    XML_File.LoadFromFile(dateiname_laden);
    // Einträge auslesen
    Hauptmenu.montag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MONTAG'].text;
    Hauptmenu.dienstag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DIENSTAG'].Text;
    Hauptmenu.mittwoch_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MITTWOCH'].Text;
    Hauptmenu.donnerstag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DONNERSTAG'].Text;
    Hauptmenu.freitag_text.Text := XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['FREITAG'].Text;

  end;

marabu 13. Apr 2005 19:55

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
Du schreibst einen formatierten Text in eine Datei, dann liest du diese Datei mit der Methode LoadFromFile() des Objektes XML_File wieder ein. Keine Ahnung, welchen Typ XML_File hat. Da du deine line breaks vermisst, scheint sich ein Parser dahinter zu verbergen, der den eingelesenen Text umformt. Der MSXML Parser kann zur white space preservation animiert werden. Vielleicht geht das bei dir auch?

Tigermoon 15. Apr 2005 10:19

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
Habe das problem gelöst

Delphi-Quellcode:
    if(FileExists(dateiname_laden))
    then begin

      // Datei wird gespeichert, das immer die aktuellsten Eingaben gespeichert sind
      datei_speichern;

      // Anlegen eines Objektes zum Auslesen
      XML_File := newXMLDocument;
      // Datei laden
      XML_File.LoadFromFile(dateiname_laden);

      montag := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MONTAG'].text, #10 , slinebreak ,[rfReplaceALL] );
      dienstag := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DIENSTAG'].Text, #10 , slinebreak ,[rfReplaceALL] );
      mittwoch := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['MITTWOCH'].Text, #10 , slinebreak ,[rfReplaceALL] );
      donnerstag := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['DONNERSTAG'].Text, #10 , slinebreak ,[rfReplaceALL] );
      freitag := StringReplace(XML_File.ChildNodes['WOCHENBERICHT'].ChildNodes['EINTRAEGE'].ChildNodes['FREITAG'].Text, #10 , slinebreak ,[rfReplaceALL] );

      // Dateinamen festlegen zum Speichern der Datei
      dateiname_speichern := 'wochenbericht_' + Hauptmenu.kalender_woche.Text + '_' + Hauptmenu.jahr_auswahl.Text + '.txt';

      // Datie wird wenn Sie vorhanden ist gelöscht, da sie sonst Fehler verursacht
      if(FileExists(dateiname_speichern))
      then begin
        DeleteFile(dateiname_speichern);
      end;

      // Inhalt der Textdatei wird auf eine Variable erzeugt
      inhalt_der_txt_datei := 'WOCHENBERICHT'+slinebreak
                +'KW '+kalender_wochen_auswahl+' JAHR '+jahres_auswahl+slinebreak+slinebreak
                +'MONTAG: '+slinebreak+montag+slinebreak+slinebreak
                +'DIENSTAG: '+slinebreak+dienstag+slinebreak+slinebreak
                +'MITTWOCH: '+slinebreak+mittwoch+slinebreak+slinebreak
                +'DONNERSTAG: '+slinebreak+donnerstag+slinebreak+slinebreak
                +'FREITAG: '+slinebreak+freitag;

      { Dateierzeugung }
      AssignFile(MyFile, dateiname_speichern );
      ReWrite(MyFile);
      { Inhalt der Variable in die Textdatei schreiben }
      WriteLn(MyFile, inhalt_der_txt_datei );
      CloseFile(MyFile);

      { Namen der erzeugten Textdatei, zum wiederfinden, anzeigen }
      unit2.mitteilung.lbl_mitteilung.Caption := 'Es wurde eine Textdatei'
                                                +' mit dem Namen '+dateiname_speichern
                                                +' erzeugt die sie nun als Anhang in einer Email verwenden können';
      unit2.mitteilung.ShowModal;
      end;
Man muss den #10 von delphi durch eine slinebreak für das memofeld ersetzen und zwar mit StringReplace()
das memofeld kennt keine #10

steffi

Marcward.de 17. Apr 2005 20:33

Re: Zeilenumbruch eines memofeldes in einer xml datei....
 
Da Du anscheinend nicht den Hauch einer Ahnung hast, wie man mit XML arbeitet und es sinnvoll nutzt, schlage ich Dir zwei Möglichkeiten vor:

1. Arbeite Dich in das Thema XML/DOM ein.
2. Lass es mit XML und löse Dein Problem auf andere Weise.

Nimm's mir nicht übel - manchmal muss man die Dinge halt beim Namen nennen! :wink:

-> ansonsten kann ich Dir nur sagen, dass Du den Rat von sakura/MathiasSimmack (CDATA-Section) befolgen solltest!


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