AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Bestimmten Teil aus einer Textdatei löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Bestimmten Teil aus einer Textdatei löschen

Ein Thema von Bea · begonnen am 1. Mär 2007 · letzter Beitrag vom 9. Mär 2007
Antwort Antwort
Bea

Registriert seit: 23. Dez 2004
53 Beiträge
 
RAD-Studio 2009 Ent
 
#1

Bestimmten Teil aus einer Textdatei löschen

  Alt 1. Mär 2007, 14:47
Hallo,
Mir liegt eine Textdatei (Test.csa) vor, die auszugsweise so aussieht:

Code:
@@Kenneranfang@@@@FIELD:0,TAGAB@@@@FIELD:1,FTA120@@@@FIELD:32,Liste der offenen Aufträge@@@@FIELD:64,25.09.00@@
FKT/FTA120/05                                      Liste der offenen Auftr„ge                                    DATUM:  25.09.00
234/12 Mustermann GmbH                                                                                            SEITE:         1
    24159 Kiel
-----------------------------------------------------------------------------------------------------------------------------------
Firma Auftr. AN-Datum AN Termin Amtl.KZ   FZ-Typ      KDNR    KG KD-Name             PLZ Ort                     -AW-    -ET-
  Fil.                                                                                                       Status Anz Pos Pos
-----------------------------------------------------------------------------------------------------------------------------------
01 01 013068 06.09.00 MB 060900 WST-ND 971 300 SD/S 350 142683      Bernhard*Bruns     26160 Bad Zwischenahn
...
...
...
Nun möchte ich aus dieser Datei einen bestimmten Teil herausschneiden.
Es soll alles zwischen @@Kenneranfang und @@ herausgeschnitten werden(in temporären String merken).
In dem Rest der Datei kann aber auch @@ vorkommen und darf aber dort nicht verändert werden.
Deshalb muss man sich sicherlich an dem ersten Vorkommmen eines @@ nach dem letzten @@@@FIELD: orientieren oder so.
Der Rest der Datei soll unverändert als Test.pcl abgespeichert werden.

In diesem Beispiel also der Teil in temporären String:

@@Kenneranfang@@@@FIELD:0,TAGAB@@@@FIELD:1,FTA120@ @@@FIELD:32,Liste der offenen Aufträge@@@@FIELD:64,25.09.00@@

und der Rest als Datei Test.pcl:

Code:
[color=#0000ff]FKT/FTA120/05                                      Liste der offenen Auftr„ge                                    DATUM:  25.09.00
234/12 Mustermann
GmbH                                                                                            SEITE:         1
    24159 Kiel
-----------------------------------------------------------------------------------------------------------------------------------
Firma Auftr. AN-Datum AN Termin Amtl.KZ   FZ-Typ      KDNR    KG KD-Name             PLZ Ort                     -AW-    -ET-
  Fil.                                                                                                       Status Anz Pos Pos
-----------------------------------------------------------------------------------------------------------------------------------
01 01 013068 06.09.00 MB 060900 WST-ND 971 300 SD/S 350 142683      Bernhard*Bruns     26160 Bad Zwischenahn
...
...
...[/color]
Wie macht man so etwas?
Kann mir da jemand helfen?
Danke schon mal im Vorraus
CU Bea

[edit=sakura] Formattierungen angepasst. Mfg, sakura[/edit]
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#2

Re: Bestimmten Teil aus einer Textdatei löschen

  Alt 1. Mär 2007, 15:10
Zitat von Bea:
Hallo,
Mir liegt eine Textdatei (Test.csa) vor, die auszugsweise so aussieht:
  • @@Kenneranfang@@@@FIELD:0,TAGAB@@@@FIELD:1,FTA120@ @@@FIELD:32,Liste der offenen Aufträge@@@@FIELD:64,25.09.00@@
    FKT/FTA120/05 Liste der offenen Auftr„ge DATUM: 25.09.00
    234/12 Mustermann GmbH SEITE: 1
    24159 Kiel
    -----------------------------------------------------------------------------------------------------------------------------------
    Firma Auftr. AN-Datum AN Termin Amtl.KZ FZ-Typ KDNR KG KD-Name PLZ Ort -AW- -ET-
    Fil. Status Anz Pos Pos
    -----------------------------------------------------------------------------------------------------------------------------------
    01 01 013068 06.09.00 MB 060900 WST-ND 971 300 SD/S 350 142683 Bernhard*Bruns 26160 Bad Zwischenahn
    ...
    ...
    ...
Nun möchte ich aus dieser Datei einen bestimmten Teil herausschneiden.
Es soll alles zwischen @@Kenneranfang und @@ herausgeschnitten werden(in temporären String merken).
In dem Rest der Datei kann aber auch @@ vorkommen und darf aber dort nicht verändert werden.
Deshalb muss man sich sicherlich an dem ersten Vorkommmen eines @@ nach dem letzten @@@@FIELD: orientieren oder so.
Der Rest der Datei soll unverändert als Test.pcl abgespeichert werden.

In diesem Beispiel also der Teil in temporären String:

@@Kenneranfang@@@@FIELD:0,TAGAB@@@@FIELD:1,FTA120@ @@@FIELD:32,Liste der offenen Aufträge@@@@FIELD:64,25.09.00@@

und der Rest als Datei Test.pcl:

FKT/FTA120/05 Liste der offenen Auftr„ge DATUM: 25.09.00
234/12 Mustermann
GmbH SEITE: 1
24159 Kiel
-----------------------------------------------------------------------------------------------------------------------------------
Firma Auftr. AN-Datum AN Termin Amtl.KZ FZ-Typ KDNR KG KD-Name PLZ Ort -AW- -ET-
Fil. Status Anz Pos Pos
-----------------------------------------------------------------------------------------------------------------------------------
01 01 013068 06.09.00 MB 060900 WST-ND 971 300 SD/S 350 142683 Bernhard*Bruns 26160 Bad Zwischenahn
...
...
...


Wie macht man so etwas?
Kann mir da jemand helfen?
Danke schon mal im Vorraus
CU Bea
Hallo Bea,

damit es sowohl möglichst allgemeingültig als auch zuverlässig funktioniert, würde ich eine Funktion schreiben, die das Muster @@Token....@@ aus Datei 1 entfernt und in Datei 2 schreibt. Diese Funktion kannst du dann einmal mit dem Parameter "Kenner" und einmal mit "FIELD" aufrufen (für das Token). Also ungefähr so:

Datei 1 lesen
@@ erkennen -> Token erkennen (ohne Abstand) -> Ausschneiden an ab @@ (einfach Pos merken)
weiterlesen
@@ erkennen -> Ausschneiden aus nach @@ -> auszuschneidenden Text in Datei 2 kopieren und in Datei 1 löschen
weiter so bis zum Ende von Datei 1

Gruss Reinhard
  Mit Zitat antworten Zitat
Bea

Registriert seit: 23. Dez 2004
53 Beiträge
 
RAD-Studio 2009 Ent
 
#3

Re: Bestimmten Teil aus einer Textdatei löschen

  Alt 1. Mär 2007, 16:11
Hallo Reinhard,
mein Namensvetter
danke für die schnelle Antwort, aber ich versteh das nur teilweise.
Die Logik selbst versteh ich, aber wie setz ich sowas in Delphi um?
Wie macht man das denn mit dem Einlesen, Ausschneiden und wieder neu Abspeichern der Textdatei überhaupt?
Wie bau ich dann solch eine Funktion ein.

Die Kennerzeile
@@Kenneranfang@@@@FIELD:0,TAGAB@@@@FIELD:1,FTA120@ @@@FIELD:32,Liste der offenen Aufträge@@@@FIELD:64,25.09.00@@
bräuchte ich ja nicht in einer anderen Datei, sondern in einem String zum Weiterverarbeiten oder noch besser gleich auseinandergebastelt so in einer Liste:
  • 0,TAGAB
    1,FTA120
    32,Liste der offenen Aufträge
    64,25.09.00

Geht sowas?
CU Bea (Kern)
  Mit Zitat antworten Zitat
IngoD7

Registriert seit: 16. Feb 2004
464 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Bestimmten Teil aus einer Textdatei löschen

  Alt 1. Mär 2007, 16:17
Zitat von Bea:
Geht sowas?
Natürlich geht sowas.

Was hast du denn schon?

Weißt du, wie man eine Textdatei einliest? Empfehlung: TStringList.

Kennst du die grundlegenden String-Verarbeitung-Befehle wie pos, lenght, etc?
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Bestimmten Teil aus einer Textdatei löschen

  Alt 1. Mär 2007, 20:37
Moin,

so müsste es gehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  SList: TStringList;
  Pfad, SText: AnsiString;
  KennAnfang, Field, Position: integer;
begin
  Pfad:= 'Test.csa';
  SList:= TStringList.Create;
  try
    if FileExists(Pfad) then
    begin
      SList.LoadFromFile(Pfad);
      SText:= SList.Text;
      KennAnfang:= Pos('@@', SList.Text);
      FIELD:= 1;
      Position:= pos('@@@@FIELD:', String(@SText[Field]));
      while(Position<> 0) and (Field+ Position<= length(SText)) do
      begin
        inc(Field, Position);
        Position:= pos('@@@@FIELD:', String(@SText[Field]));
      end;
      delete(SText, KennAnfang, Field+ 22- KennAnfang);
      SList.Text:= SText;
      SList.SaveToFile('Test.pcl');
    end;
  finally
    SList.Free;
  end;
end;
Bei Delphi 6 gibt es wohl noch kein PosEx.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Bea

Registriert seit: 23. Dez 2004
53 Beiträge
 
RAD-Studio 2009 Ent
 
#6

Re: Bestimmten Teil aus einer Textdatei löschen

  Alt 2. Mär 2007, 11:44
Hallo,
ach so man macht das mit Einlesen in eine Stringliste.
Ja, Stringverarbeitungssachen wie pos, lenght, etc hab ich schon gemacht, aber eben nicht mit Dateien.

Ist ja prima, dass mir hier gleich bitsetter eine Funktion gebastelt hat.
Hab ich gleich ausprobiert und werd mich jetzt noch näher damit vertraut machen,
um den Ablauf auch genau zu verstehen.
Ich muss ja noch einbauen, dass ich den auszuschneidenden String in einer Variablen zur Weiterverarbeitung zur Verfügung habe, oder.?

Die Funktion klappt fast, nur der auszuschneidende String wird bei mir noch nicht ganz vollständig ausgeschnitten, es bleibt noch das letzte Stück (5.09.00@@) des auszuschneideneden Strings in der neu erzeugten Datei Test.pcl drin

Vielen Dank
CU Bea
  Mit Zitat antworten Zitat
Benutzerbild von bitsetter
bitsetter

Registriert seit: 17. Jan 2007
1.169 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Bestimmten Teil aus einer Textdatei löschen

  Alt 2. Mär 2007, 12:46
Hallo,

Delphi-Quellcode:
MeinString:= Copy(SText, KennAnfang, Field+ 22- KennAnfang);//zur Weiterverarbeitung
delete(SText, KennAnfang, Field+ 22- KennAnfang);//die 22 must du dann vergrößern
SList.Text:= SText;
SList.SaveToFile('Test.pcl');
Habe ich jetzt nicht getestet, aber so müsste es gehen.
Gruß bitsetter
"Viele Wege führen nach Rom"
Wolfgang Mocker (geb. 1954), dt. Satiriker und Aphoristiker
  Mit Zitat antworten Zitat
Bea

Registriert seit: 23. Dez 2004
53 Beiträge
 
RAD-Studio 2009 Ent
 
#8

Re: Bestimmten Teil aus einer Textdatei löschen

  Alt 9. Mär 2007, 11:21
Ich muss das Thema nochmal neu formulieren, ich hab mich da etwas vertan.
Es handelt sich nicht immer um eine Textdatei, sondern um einen Datenstrom(eben nicht immer im Textformat) in einer *.csa - Datei.
Ich formuliere das nochmal als neuen Beitrag (Anzahl von Bytes aus Datei ausschneiden/löschen), sorry.
Trotzdem danke für die Hilfe, für reine Textdateien ging das alles so (hatte mich schon gefreut), aber eben mit den andren Dateien nicht.


CU Bea
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:57 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