AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Textdatei Zeichen in bestimmter Zeile löschen
Thema durchsuchen
Ansicht
Themen-Optionen

Textdatei Zeichen in bestimmter Zeile löschen

Ein Thema von bundy · begonnen am 27. Apr 2006 · letzter Beitrag vom 27. Apr 2006
Antwort Antwort
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#1

Textdatei Zeichen in bestimmter Zeile löschen

  Alt 27. Apr 2006, 09:50
Moin Moin

Ich erstelle ein Dumpfile, das mehere Insert´s besitzt.
Jetzt will ich in der vorletzten Zeile folgendes änderen ("," -->";")


Dumpfile

Code:

LOCK TABLES callstemp WRITE;
INSERT INTO callstemp VALUES
(null,"8040197196","Inland","NB-Neusiedl/See","2006-03-01","02167 2603           ","08:03:57","0.45","0.0167","GZ"),
(null,"8040197196","Inland","NB-Neusiedl/See","2006-03-01","02167 2882           ","09:07:53","0.983333333333333","0.04012","GZ"),
(null,"8040197196","Inland","NB-Nickelsdorf","2006-03-05","02146 20007          ","16:24:30","20.5833333333333","0.8398","GZ"),
(null,"8040197196","Inland","Wien","2006-03-06","01 51215074          ","13:09:41","0.15","0.0167","GZ"),
(null,"8040197196","Inland","NB-Neusiedl/See","2006-03-06","02167 7203           ","15:07:49","2.41666666666667","0.0986","GZ"), <<====== Dieses Zeichen muss ein ";" werden.
UNLOCK TABLES;
lg
Bundy
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
marabu

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

Re: Textdatei Zeichen in bestimmter Zeile löschen

  Alt 27. Apr 2006, 10:18
Hallo.

Wenn du diese Dump-Files erzeugst, warum berichtigst du dann nicht einfach den erzeugenden Code anstelle vom Output?

Wenn du aber keine Kontrolle über den erzeugenden Code hast, dann wäre es wichtig das genaue Format zu kennen. Sind die Umbrüche korrekt wiedergegeben?

Ein möglicher Ansatz wäre die gepufferte Umsetzung mit einem look ahead von einer Zeile:

Delphi-Quellcode:
procedure AdjustScript(fn: TFileName);
var
  tfIn, tfOut: TextFile;
  line, buffer: String;
begin
  AssignFile(tfIn, fn);
  Reset(tfIn);
  AssignFile(tfOut, ChangeFileExt(fn, '.tmp'));
  Rewrite(tfOut);

  buffer := '';
  while not Eof(tfIn) do
  begin
    ReadLn(tfIn, line);
    if (line = '') or (line[Length(line)] = ';') then
      if (buffer <> '') and (buffer[Length(buffer)] = ',') then
        buffer[Length(buffer)] := ';';
    if buffer <> 'then
      WriteLn(tfOut, buffer);
    buffer := line;
  end;

  CloseFile(tfOut);
  CloseFile(tfIn);
end;
Getippt und nicht getestet.

Grüße vom marabu
  Mit Zitat antworten Zitat
Klaus01

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

Re: Textdatei Zeichen in bestimmter Zeile löschen

  Alt 27. Apr 2006, 10:22
alles in eine Stringlist laden
den zweit letzten String in der Liste bearbeiten und das letzte Zeichen
des String durch ein ';' ersetzen.

Delphi-Quellcode:
sl:=TStringList.create;
sl.strings.loadfromFile(yourdumpfile);

s:=sl.strings[count-2]; // count -1 liefert den letzten String der Liste
s[length(s)]:=';';
sl.strings[count-2]:=s;
sl.strings.savetoFile(yourDumpfile);
sl.free;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#4

Re: Textdatei Zeichen in bestimmter Zeile löschen

  Alt 27. Apr 2006, 10:52
Ich will das Ganze File nicht in einen String laden, da stehen ca. 250.000 Datensätze drinnen und das werden ständig mehr. (Einzelpespräche von Telefon Kunden).


So erstelle ich das Ding.
Delphi-Quellcode:
procedure tuser.ImportFileEinlesen;
var
x,y,flag,counter:integer;
Anlagennummer,Dataline,Zone,O1Calldate,O1Destnumber,O1Destdesciption,O1CallStartTime:string;
O1CallDuration,O1Callprice,Importfilename,GZFZ:string;
DurationStringHHHH,DurationStringMM,DurationStringSS,DurationStringSumme:String;
CallStartHH,CallStartMM,CallStartSS,CallDateDD,CallDateMM,CallDateYY:string;
DurationIntHHHH,DurationIntMM,DurationIntSS:integer;
Duration,Summe,Unitpreis,DurationIntSumme:Double;
CallStartTime,FreizeitAnfang,FreizeitEnde,GeschaeftszeitAnfang,GeschaeftszeitEnde:TTime;
aFile:TextFile;
begin
 AssignFile(aFile,ExtractFilePath(Application.ExeName)+'\Dumpfile\dumpfile.sql');
 Rewrite(aFile);
 Writeln(aFile,DumpHeader.Text);
 Writeln(aFile,'LOCK TABLES callstemp WRITE;');
 Writeln(aFile,'INSERT INTO callstemp VALUES ') ;

 counter:=0;

for x := 0 to fimoprtStringlist.Count-1 do
  begin
    inc(counter);
    fmMain.Gauge1.MaxValue:=fimoprtStringlist.Count;
    fmMain.Gauge1.Progress:=x;
    application.ProcessMessages;
    ..
    //Berechnung der Datenfelder (ca 4 Seiten Code. den hab ich mal nicht gepostet)
    ..

    if (counter < 100) then
    begin
    writeln(aFile,'(null,"'+Anlagennummer+'","'+Zone+'","'+O1Destdesciption+'","'+FormatDateTime('YYYY-MM-DD',StrToDate(CallDateDD+'.'+CallDateMM+'.'+CallDateYY))+'","'+O1Destnumber+'","'+TimeToStr(CallStartTime)+'","'+BeistrichAufPunkt(FloatToStr(DurationIntSumme))+'","'+BeistrichAufPunkt(FloatToStr(Summe))+'","'+GZFZ+'"),');
    end
    else
    begin
    counter:=0;
    writeln(aFile,'(null,"'+Anlagennummer+'","'+Zone+'","'+O1Destdesciption+'","'+FormatDateTime('YYYY-MM-DD',StrToDate(CallDateDD+'.'+CallDateMM+'.'+CallDateYY))+'","'+O1Destnumber+'","'+TimeToStr(CallStartTime)+'","'+BeistrichAufPunkt(FloatToStr(DurationIntSumme))+'","'+BeistrichAufPunkt(FloatToStr(Summe))+'","'+GZFZ+'");');
    writeln(aFile,'INSERT INTO callstemp VALUES ') ;

    end;
end;
Das Problem ist das das Importfile, welches ich auf fimoprtStringlist lade , hat nicht in jeder Zeile einen Datensatz, sonst könnte ich ja den fimoprtStringlist.count -2 benutzen.
Sieht ca so aus das File welches ich importiere

Code:
A1Priority Telecom GmbH        Erdbergstraße 52-60           A-1030 Wien                  
A20800 252 290                  000000000                 [email]businessinfo@priority.at[/email]    
A32015100696920222PRIORITY TELECOM GMBH        
B1ÖLREINIGUNG GMBH                                              
B2AUGASSE 13                      70211 SIGENDORF                
B3                                                               
B48040187200                                                     
B58040187200                      8040187200                     
B6                                                               
B7OESTERR.POSTSPARK.           6000000075659723                                           
C18104512011029662720051104200511182005100120051031N2000000COY
D100000000000+00000000000+00000000000+00000000000+
F10268720300   BKF Wholesale 710000139140000000209+0000000000+0000000000+0000000209+
I1Zahlung für Kaution               0000036336+
I1Anpassung Kaution                 0000036336-
I1Übertrag auf Hauptkto. 8104406-01/10000036336+
I1Übertrag auf Hauptkto. 8104406-01/10000000209-
J10000000000+00200000000000+0000000000+
K10268720300   BKF Wholesale
N1on-Net            
O10510051947 1960           Priority Telecom        08184800000121               0000000000+
O11710001945 4800           Priority Telecom        11343200000018               0000000000+
O117100501945 4800          Priority Telecom        11352500000108               0000000000+
O12510050967 6937           Priority Telecom        11025600000005               0000000000+
O12510050967 6937           Priority Telecom        11095100000529               0000000000+
P1GESCHÄFTSZ00000500000821000000000000000+
N1Inland
O101100501 6162997           Wien                    12465700000037               0000000001+
O103100501 313263366         Wien                    13570900000027               0000000001+
O110100501 601223560         Wien            

..
..
Auf Grund der Variablen am Satzanfang werte ich die Zeilen aus.

lg
Bundy
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  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 19:55 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