AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein TStringlist wieder mit Trennzeichen speichern

TStringlist wieder mit Trennzeichen speichern

Ein Thema von zaphood · begonnen am 19. Jan 2020 · letzter Beitrag vom 27. Jan 2020
Antwort Antwort
zaphood

Registriert seit: 19. Jan 2020
Ort: Hattingen
11 Beiträge
 
FreePascal / Lazarus
 
#1

TStringlist wieder mit Trennzeichen speichern

  Alt 19. Jan 2020, 21:52
Hallo Forum Gemeinde,
ich habe folgendes Problem das ich eine txt Datei mit Daten einlesen und verändern möchte. Die Datei ist mit Trennzeichen aufgebaut und muss auch wieder so gespeichert werden.
Momentan stehe ich auf dem Schlauch und glaube das TStringlist nicht dafür geeignet ist.

Gewünschtes Ziel ist:
String Eingang = 0193433020;2301000953;CNC-DB;3302060000;drehen01;300;;;;
String Ausgang = 2301000953;10;3302060000;1;1;;193433020;

Aufbau der Ausgabe was ich bisher geschafft habe:
2301000953 CR/LF
10 CR/LF
3302060000 CR/LF
1 CR/LF
1 CR/LF
; CR/LF
0193433020 CR/LF
;CR/LF
CR/LF
CR/LF
CR/LF
CR/LF

Das Umsortieren der Reihenfolge und hinzufügen von weiteren Daten hat geklappt aber leider mit Steuerzeichen und nicht wie gewünscht in einer Zeile.

Bitte um Tips ob ich mit TStringList das erreichen kann oder total falsch liege.
Danke und Gruß

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl : tstringlist; //
begin
  sl := TStringList.Create;
  sl.Delimiter := ';'; //
  sl.DelimitedText := '0193433020;2301000953;CNC-DB;3302060000;drehen01;300;;;;';
  sl.delete(2);
  sl.delete(3);
  sl.Move(1,0);
  sl.insert(1,'10');
  sl.Move(3,2);
  sl.insert(3,'1');
  sl.insert(4,'1');
  sl.insert(5,' ');
  sl.SaveToFile('d:\SPC.dat');
  sl.Free;
end;
Dirk
  Mit Zitat antworten Zitat
zaphood

Registriert seit: 19. Jan 2020
Ort: Hattingen
11 Beiträge
 
FreePascal / Lazarus
 
#2

AW: TStringlist wieder mit Trennzeichen speichern

  Alt 21. Jan 2020, 07:27
Das Problem ist gelöst, es wird alles in einer Zeile geschrieben und ohne Steuerzeichen.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

var
  sl : tstringlist;
  s0, s1, s2, s3, s4, s5 : String;
  Datei : TextFile;
  Filename : String;
  Datum : String;

begin
  sl := TStringList.Create;
  sl.Delimiter := ';'; //
  sl.DelimitedText := '0193433020;2301000953;CNC-DB;3302060000;drehen01;300;';
  s0 := sl.Strings[0]; //1. Autragsnummer
  s1 := sl.Strings[1]; //2. Artikelnummer
  s2 := sl.Strings[2]; //3. Messtation
  s3 := sl.Strings[3]; //4. Kapazität
  s4 := sl.Strings[4]; //5. Prüfablauf
  s5 := sl.Strings[5]; //6. Anzahl Teile
  Datum := FormatDateTime('yyyy_mm_dd__hh_mm_ss', Now);
  Filename := 'BDECN ' + Datum + '.dat';
  AssignFile(Datei, Filename);
  Rewrite(Datei);
  write(Datei, s1);
  write(Datei, ';');
  write(Datei, '10');
  write(Datei, ';');
  write(Datei, s3);
  write(Datei, ';');
  write(Datei, '1');
  write(Datei, ';');
  write(Datei, '1');
  write(Datei, ';');
  write(Datei, ';');
  write(Datei, s0);
  write(Datei, ';');
  CloseFile(Datei);
  sl.Free;
end;
Dirk
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.869 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TStringlist wieder mit Trennzeichen speichern

  Alt 21. Jan 2020, 08:08
Da würde dann aber ein WriteLn( sl.DelimitedText); reichen
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#4

AW: TStringlist wieder mit Trennzeichen speichern

  Alt 21. Jan 2020, 08:34
Und ein Ressourcenschutzblock, falls es beim Rewrite knallt, weil die Datei nicht geschrieben werden kann, und dann ein Speicherleck entsteht.

Ich weiß nicht ob es im FPC sowas gibt, aber warum sollte es sowas nicht geben.

In Delphi gibt es die IOUtils: TFile.WriteAllText(Filename, SL.DelimitedText);
Und dann gibt es natürlich auch noch den TFileStream, welchen man ebenfalls gern benutzen darf.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
zaphood

Registriert seit: 19. Jan 2020
Ort: Hattingen
11 Beiträge
 
FreePascal / Lazarus
 
#5

AW: TStringlist wieder mit Trennzeichen speichern

  Alt 22. Jan 2020, 07:37
Danke das jemand draufgeschaut hat und für die Tipps mit dem Ressourcenschutzblock usw. Das versuche ich noch einzubauen.
Jetzt knallt es tatsächlich und ich verstehe nicht warum.

Die Zeichenkette hatte ich für die ersten Testzwecke im Programm eingebaut
sl.DelimitedText := '0193433020;2301000953;CNC-DB;3302060000;drehen01;300;';

Nun möchte ich die Textdatei laden, welche exakt genauso aussieht und es kommt zu einem EStringListError - list index(1) out of bounds
sl.LoadFromFile('SPC.txt'); //Datei in Stringliste laden

Im Einzelschritt passiert es bei folgender Zeile.
Auftragsnummer := sl.Strings[0];

Mit ShowMessage(sl.DelimitedText) habe ich mir die Zeichenkette angesehen und mir ist aufgefallen, dass sie unterschiedlich aussieht.
0193433020;2301000953;CNC-DB;3302060000;drehen01;300; -> alles ok Zeichenkette im Programm
"0193433020;2301000953;CNC-DB;3302060000;drehen01;300;" -> mit LoadFromFile steht die Kette auf einmal in "...."


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  sl : tstringlist;
  Auftragsnummer, Artikelnummer, Messstation, Kapazitaet : String;
  Datei : TextFile;
  Filename : String;
  Datum : String;
  log : String;

begin
  sl := TStringList.Create;
  sl.Delimiter := ';';
  sl.LoadFromFile('SPC.txt'); //Datei in Stringliste laden
  //sl.DelimitedText := '0193433020;2301000953;CNC-DB;3302060000;drehen01;300;';
  ShowMessage(sl.DelimitedText);
  Auftragsnummer := sl.Strings[0];
  Artikelnummer := sl.Strings[1];
  Messstation := sl.Strings[2];
  Kapazitaet := sl.Strings[3];
  ShowMessage(sl.DelimitedText);
  Datum := FormatDateTime('yyyy_mm_dd__hh_mm_ss', Now);
  Filename := 'BDECN ' + Datum + '.dat';
  log := Datum+' '+sl.DelimitedText;
  if Messstation = 'RBthen
    begin
     Meldung.Caption := 'skip RB';
     logdatei(log);
    end
  else
    if Messstation = 'CNC-FBthen
    begin
     Meldung.Caption := 'skip CNC-FB';
     logdatei(log);
    end
  else
  begin
   Meldung.Caption := 'Datei ok';
   logdatei(log);
   AssignFile(Datei, Filename);
   Rewrite(Datei);
   write(Datei, Artikelnummer);
   write(Datei, ';');
   write(Datei, '10');
   write(Datei, ';');
   write(Datei, Kapazitaet);
   write(Datei, ';');
   write(Datei, '1');
   write(Datei, ';');
   write(Datei, '1');
   write(Datei, ';');
   write(Datei, ';');
   write(Datei, Auftragsnummer);
   write(Datei, ';');
   CloseFile(Datei);
   sl.Free;
  end;
end;
end.
Dirk
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.778 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: TStringlist wieder mit Trennzeichen speichern

  Alt 22. Jan 2020, 08:04
.. wenn Du die Datei mit loadFromFile in die StringList lädst
und Du anschliessend sl.delimitedText hast Du die ganze Datei dadrin ... ist dann der ganze Rest.

Was Du vielleicht möchtest ist die pro Zeile den delimited Text anschauen/bearbeite.
Dan musst Du pro TextZeile den Inhalt in eine andere StringList übergeben und diese dann verarbeiten.

Im Prinzip so:
Delphi-Quellcode:
for i:= 0 to sl.count -1 do
  begin
    slZeile := sl.create;
    try
      slZeile.delimitedText := sl[i];
      slZeile[0]...
      slZeile[1] ..
    finally
      slZeile.free;
    end;
  end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:44 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