Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Teilstring in Textdatei ändern (https://www.delphipraxis.net/69740-teilstring-textdatei-aendern.html)

Bea 19. Mai 2006 14:10


Teilstring in Textdatei ändern
 
Hallo,
ich habe eine Datei "C:\temp\Test.001" in der ich zur Laufzeit meines Programms an einer bestimmten Stelle etwas ändern muss.
Der Inhalt der Datei sieht ungefähr immer wie folgt aus:
Wichtig für mich ist die Zeile
<StoreProperties DocumentName="Testdokument" />

Code:
<DWDocument DW5BasketFileName="Test.001">
  <FileInfos>
    <ImageInfos>
      <ImageInfo id="0,0,0" nPages="0">
        <FileInfo fileName="c:\Test\Test.DWTiff" dwFileName="Test.DWTiff" type="normal" />
      </ImageInfo>
    </ImageInfos>
  </FileInfos>
  <Section number="0" startPage="0" dwguid="f8494ff5-109f-46a5-b721-08a3be0a67b1">
    <Metadata version="0">
      <SystemProperties>
        <DiskNo>0</DiskNo>
        <PageCount>0</PageCount>
        <Flags>2</Flags>
      </SystemProperties>
      <FieldProperties />
      <StoreProperties DocumentName="Testdokument" />
    </Metadata>
    <Page number="0">
      <Rendition type="original">
        <Content id="0,0,0" pageNumberInFile="0" />
        <Annotation>
          <DW4CheckSum dwCheckSum="3652845198" dwDate="121402505" />
        </Annotation>
      </Rendition>
    </Page>
  </Section>
</DWDocument
Nun muss ich zur Laufzeit meines Programms den Eintrag in den Anführungsstrichen bei
<StoreProperties DocumentName="Testdokument" />
durch einen neuen Wert (z.B.123456789) ersetzen.

Kann mir bitte jemand sagen, wie soetwas am besten geht?
Ich bedanke mich schonmal im Vorraus für jede Hilfe.

CU Bea

Klaus01 19. Mai 2006 14:16

Re: Teilstring in Textdatei ändern
 
Du könntest die ganze Datei in eine Strinlist laden
Delphi-Quellcode:
var
  sl: TStringlist;
  pos: Byte;

begin
  sl:=TStringList.create;
  sl.loadfromFile('deinFile');
  pos:=sl.strings.indexof('<StoreProperties DocumentName="Testdokument" />');
  sl.string[pos]:='<StoreProperties DocumentName="was immer du willst" />');
  sl.savetoFile('deinFile');
  sl.free;
end;
vielleicht geht ja auch was mit xml, da kenne ich mich aber nicht mit aus.

Grüße
Klaus

[edit] delphi tags gesetzt

Bea 19. Mai 2006 14:22

Re: Teilstring in Textdatei ändern
 
Das Wort "Testdokument" ist hier doch nur ein Beispiel.
Ich kenne doch den ursprünglichen Eintrag zwischen den Anführungszeichen zur Laufzeit nicht.

Mit XML hab ich auch noch nie was gemacht und weiß eben auch nicht, ob und wie das hierfür überhaupt gehen würde.

CU Bea

Klaus01 19. Mai 2006 14:26

Re: Teilstring in Textdatei ändern
 
Delphi-Quellcode:
 DeineSuchBezeichnung:=edit1.text; //string
 DeineBezeichnung:=edit2.text;     //string
 idx:=sl.strings.indexof('<StoreProperties DocumentName="'+deineSuchBezeichnung+'">');
 sl.strings[pos]:='<StoreProperties DocumentName="'+deineBezeichnung+'">';

oder

Delphi-Quellcode:
mit i : Byte;

  for i:=0 to sl.count -1 do
    begin
      if pos('<StoreProperties DocumentName=',sl.strings[i]) <> 0 then
         idx:=pos('<StoreProperties DocumentName=',sl.strings[i]);    
    end;
so kannst Du auch einen Teilstring in der Liste suchen.
Grüße
Klaus

marabu 19. Mai 2006 14:29

Re: Teilstring in Textdatei ändern
 
Hallo Bea,

selbstverständlich ist das ein XML-Problem. Du kannst direkt auf dem MSXML Parser aufsetzen oder die Borland Komponente TXMLDocument verwenden. Du solltest eventuell die von dir verwendete Delphi-Version in dein DP-Profil eintragen.

Grüße vom marabu

Bea 19. Mai 2006 14:38

Re: Teilstring in Textdatei ändern
 
Hallo Klaus,
irgendwie verstehst du nicht, was ich meine.
Ich weiß zur Laufzeit nie, was in den Anführungszeichen steht.
Ich kriege nur die Datei und weiß, dass ich dort genau an der Stelle zwischen den Anführungszeichen
<StoreProperties DocumentName="blablabla" />
einen von mir erzeugten Wert einschreiben muss.
Ich könnte als Suchkriterium also maximal das Stück
<StoreProperties DocumentName=
benutzen.

Deshalb weiß ich ja auch nicht, wie ich das so richtig anstellen soll.
Bei XML hab ich mal was von Tags gehört, aber was ist das, wie geht das und kann man diese Datei überhaupt mit XML- Zeugs behandeln?

CU Bea

Klaus01 19. Mai 2006 14:42

Re: Teilstring in Textdatei ändern
 
marabu hat geschrieben das geht mit XML und ich denke da hat er wohl auch recht.


Ansonsten geht es auch so:

Delphi-Quellcode:
mit i : Byte;

  for i:=0 to sl.count -1 do
    begin
      // wenn <StoreProperties DocumentName= in dem String gefunden wird
      // merke die Position (idx)
      if pos('<StoreProperties DocumentName=',sl.strings[i]) <> 0 then
         idx:=pos('<StoreProperties DocumentName=',sl.strings[i]);    
     end;  

   // ersetze an Position idx den String durch einen neuen
   sl.strings[idx]:='<StoreProperties DocumentName="'+'deineBezeichnung">';
Grüße
Klaus

marabu 19. Mai 2006 14:49

Re: Teilstring in Textdatei ändern
 
Kurz vor dem Abtauchen noch das hier:

Delphi-Quellcode:
uses
  XMLIntf,
  XMLDoc;

function XMLChange(markup, ePath, aName, oldValue, newValue: String): String;
var
  doc: IXMLDocument;
  nl: IDOMNodeList;
  e: IDOMElement;
  i: Integer;
  s: String;
begin
  doc := LoadXMLData(markup);
  with doc.DOMDocument as IDOMNodeSelect do
    nl := SelectNodes(ePath);
  for i := 0 to Pred(nl.length) do
  begin
    e := nl.item[i] as IDOMElement;
    s := e.getAttribute(aName);
    if CompareText(s, oldValue) = 0 then
      e.setAttribute(aName, newValue);
  end;
  Result := doc.XML.Text;
end;
marabu

Klaus01 19. Mai 2006 14:50

Re: Teilstring in Textdatei ändern
 
@marabu

und wenn sie den oldvalue nicht kennt?

Grüße
Klaus

himitsu 19. Mai 2006 14:58

Re: Teilstring in Textdatei ändern
 
Kenn mich mit XML ja och kaum aus, aber meiner Meinung nach sollte es doch möglich sein nach dem "Feld" (oder wie man dat zwischen "<" und ">" nennt) "StoreProperties" zu suchen und dort dem "Parameter"? einfach einen neuen wet zuzuweisen, dafür bäuchte man ja theoretsch nicht zu wissen was da überhaupt drinsteht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:17 Uhr.
Seite 1 von 2  1 2      

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 by Thomas Breitkreuz