![]() |
Stream bearbeiten - wie?
Hilfe,
Ich habe eine Datei, die hat in einer Zeile z.B. folgenden Eintrag:
Code:
Ich möchte nun jeweils bei 166.000 den Punkt entfernen und hinter 000 ein Leerzeichen einfügen. Aber wie um himmelswillen mache ich das?
LIEFERSCHEIN 166.000 18/08/2004 6602 SN15743 166.000 test GMBH /EMAIL/DOCS/LS000000000000040.PDF
bisher habe ich nur das:
Delphi-Quellcode:
mit pos könnte ich den erste Punkt ermitteln, aber wie geht es dann weiter? und wie füge ich ein Leerzeichen dazu?
function Konvertiere(aktuelleDatei:String): Boolean;
begin //Datei in den MemoryStream xx geladen xx.LoadFromFile(aktuelleDatei); xx.SaveToFile(aktuelleDatei); end; Wer hat eine Idee? Gruss Susanne |
Re: Stream bearbeiten - wie?
Ein leerzeichen? Oder auch wirklich den Stream um dieses zeichen verkürzen?
|
Re: Stream bearbeiten - wie?
ich gehe davon aus, dass der text in einem string s steht!
dann so:
Delphi-Quellcode:
..
var txt, // hier steht deine zeile drin stxt, // zu suchender text hilf: string; // hilfstext p, // pos des suchtextes l: integer; // länge des suchtextes .. stxt:='166.000'; l:=length(stxt); p:=pos(stxt,txt); while p>0 do begin hilf:=copy(txt,p,l); // suchtext im string delete(hilf,pos('.',hilf),1); // punkt löschen hilf:=copy(txt,1,p-1)+hilf+' '; // string bis position p + ersetztext + ' '; delete(txt,1,p+l-1); // lösche teilstring bis position nach stext txt:=hilf+txt; // rest zusammenfügen p:=pos(stxt,txt); // ist noch ein stext vorhanden? end; .. |
Re: Stream bearbeiten - wie?
Ab die zu suchende Zahl kann variieren, es ist nicht immer '166.000' und ich weiss auch nicht, ob die Zahl die gleiche länge hat und anschliessend wollte ich diesen veränderten Stream wieder als Datei speichern.
|
Re: Stream bearbeiten - wie?
du könntest das ganze mit PosEx machen, damit kannst du die start-such-position angeben.
Ungefähr so sollte das ganze dann aussehen (davon ausgegangen das dein Stream in "Suchstring" steht
Delphi-Quellcode:
Source ist ungetestet und soll nur als gedankenanstoß dienen
var LStartpos: Integer;
LZahlen: String; begin LZahlen := '0123456789'; LStartpos := 1; while (LStartpos < length(Suchstring)) and (LStartpos > 0) do begin LStartpos := PosEx('.', Suchstring, LStartpos); if LStartpos > 0 then //wenn punkt gefunden wurde begin //sicherstellen das nicht ".pdf" etc gefunden wurde sonder eine zahl folgt if pos(Suchstring[LStartpos + 1], LZahlen) > 0 then begin //punkt entfernen Suchstring := copy(Suchstring, 1, LStartpos - 1) + copy(Suchstring, LStartpos +1, length(Suchstring)); //jetzt noch letzte zahl finden um leerzeichen einzufügen while pos(Suchstring[LStartpos], LZahlen) > 0 do inc(LStartpos); //jetzt sollte LStartpos hinter der letzten zahl sein Suchstring := copy(Suchstring, 1, LStartpos - 1) + ' ' + copy(Suchstring, LStartpos, length(Suchstring)); end else inc(LStartpos); end; end; [Edit]Inzwischen getestet und funzt (Source verbessert)[/Edit] |
Re: Stream bearbeiten - wie?
Danke das hat mir sehr geholfen, es funktioniert.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:15 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 by Thomas Breitkreuz