AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Zeilenumbruch eines memofeldes in einer xml datei....
Thema durchsuchen
Ansicht
Themen-Optionen

Zeilenumbruch eines memofeldes in einer xml datei....

Ein Thema von Tigermoon · begonnen am 11. Apr 2005 · letzter Beitrag vom 17. Apr 2005
Antwort Antwort
Seite 1 von 2  1 2      
Tigermoon

Registriert seit: 11. Mär 2005
Ort: Baumholder
100 Beiträge
 
Delphi 7 Enterprise
 
#1

Zeilenumbruch eines memofeldes in einer xml datei....

  Alt 11. Apr 2005, 14:21
... speichern und wieder anzeigen

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

könnte mir da mal bitte jemand weiterhelfen?
BITTE

Steffi
Stephanie
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

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

  Alt 11. Apr 2005, 14:24
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

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Tigermoon

Registriert seit: 11. Mär 2005
Ort: Baumholder
100 Beiträge
 
Delphi 7 Enterprise
 
#3

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

  Alt 11. Apr 2005, 14:35
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
Stephanie
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#4

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

  Alt 11. Apr 2005, 15:39
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? ) viel besser weg. Oft genutzt: Hier im Forum suchenMS XML.
  Mit Zitat antworten Zitat
Tigermoon

Registriert seit: 11. Mär 2005
Ort: Baumholder
100 Beiträge
 
Delphi 7 Enterprise
 
#5

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

  Alt 13. Apr 2005, 13:56
Jetzt wird es in zeilen gespeichert aber nicht in zeilen ausgelesen
Stephanie
  Mit Zitat antworten Zitat
Tigermoon

Registriert seit: 11. Mär 2005
Ort: Baumholder
100 Beiträge
 
Delphi 7 Enterprise
 
#6

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

  Alt 13. Apr 2005, 13:57
BITTE BITTE

der der eine idee hat bitte melden

verzweifele noch
Stephanie
  Mit Zitat antworten Zitat
MathiasSimmack
(Gast)

n/a Beiträge
 
#7

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

  Alt 13. Apr 2005, 14:29
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.
  Mit Zitat antworten Zitat
Tigermoon

Registriert seit: 11. Mär 2005
Ort: Baumholder
100 Beiträge
 
Delphi 7 Enterprise
 
#8

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

  Alt 13. Apr 2005, 15:23
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;
Stephanie
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

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

  Alt 13. Apr 2005, 20:55
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?
  Mit Zitat antworten Zitat
Tigermoon

Registriert seit: 11. Mär 2005
Ort: Baumholder
100 Beiträge
 
Delphi 7 Enterprise
 
#10

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

  Alt 15. Apr 2005, 11:19
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
Stephanie
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:01 Uhr.
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