![]() |
Textdatei Zeichen in bestimmter Zeile löschen
Moin Moin
Ich erstelle ein Dumpfile, das mehere Insert´s besitzt. Jetzt will ich in der vorletzten Zeile folgendes änderen ("," -->";") Dumpfile
Code:
lgLOCK 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; Bundy |
Re: Textdatei Zeichen in bestimmter Zeile löschen
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:
Getippt und nicht getestet.
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; Grüße vom marabu |
Re: Textdatei Zeichen in bestimmter Zeile löschen
alles in eine Stringlist laden
den zweit letzten String in der Liste bearbeiten und das letzte Zeichen des String durch ein ';' ersetzen.
Delphi-Quellcode:
Grüße
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; Klaus |
Re: Textdatei Zeichen in bestimmter Zeile löschen
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:
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.
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; Sieht ca so aus das File welches ich importiere
Code:
Auf Grund der Variablen am Satzanfang werte ich die Zeilen aus.
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 .. .. lg Bundy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:49 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-2025 by Thomas Breitkreuz