![]() |
Datei nummeriert speichern
Hallo,
als ich benutze das Synedit. Ich weiß dess es nummeriert aber es soll folgendermaßeb sein: Die dateien sehen so aus: 1 dfgsdf 2 dfasdfa 3 dfasdfsadf 4 fasdfasdfadsf 5 etc. die nummern sollen beim laden entfernt werden, ich habe dazu folgendes gemacht:
Delphi-Quellcode:
Also ihr verteht ich mach da jede Zeile einzeln durch und des dauert hald ungemein lange wisst ihr wie mann dabei Zeit sparen kann? Oder eine ander Möglichkeit?
// Proceduren für das auseinandernehmen eines Strings
procedure GetWords(TheString, Separator: String; var Strings: TStringList); begin try Strings.Clear; while Pos(Separator, TheString)>0 do begin Strings.Add(Copy(TheString, 1, Pos(Separator, TheString)-1)); TheString:=Copy(TheString, Pos(Separator, TheString)+Length(Separator), Length(TheString)); end; Strings.Add(TheString); except end; end; function WordCount(TheString, Separator: String): Integer; var OurStrings: TStringList; begin OurStrings:=TStringList.Create; GetWords(TheString, Separator, OurStrings); result:=OurStrings.count; OurStrings.free; end; function GetWord(TheString, Separator: String; Nummer: Integer): String; var OurStrings: TStringList; begin OurStrings:=TStringList.Create; GetWords(TheString, Separator, OurStrings); try result:=OurStrings[Nummer-1]; except result:='' end; OurStrings.free; end; // richtiger Text zahl:=-1; while zahl+2<=synmemo1.Lines.Count do begin zahl:=zahl+1; form1.synmemo1.Lines.Add(getword(synmemo1.Lines.Strings[zahl],' ',2)); ladenP.Position:=zahl; end; Danke |
Re: Datei nummeriert speichern
Hallo Dragon27,
warum müssen denn die Dateien nummeriert gespeichert werden? :gruebel: MfG Lorenz |
Re: Datei nummeriert speichern
Erstens:
So sollte es aussehen, wenn man dynamisch Objekte erzeugt und freigibt.
Delphi-Quellcode:
Das hier dürfte doch reichen, um von allen Zeilen die ersten zwei Stellen abzuschneiden (ungetestet!):
XXX.Create;
Try ... Finally FreeAndNil(XXX); End;
Delphi-Quellcode:
Nachtrag: @lorenz
Var
flStrList : TStringList; DeinFileName : String; Zahl : Integer; ... Begin ... flStrList := TStringList.Create; Try flStrList.LoadFromFile(DeinFileName); Zahl := 0; While zahl < pred(flStrList.Count) Do Begin // ladenP.Position := zahl; flStrList[Zahl] := Copy(flStrList[Zahl], 3, Length(flStrList[Zahl])); inc(Zahl); End; Form1.SynMemo1.Lines.Assign(flStrList); Finally FreeAndNil(flStrList); End; Ich glaube er hat die Nummern in der Datei und will sie nicht mehr im SynMemo haben. Edit: schnell hingehackt und voller Bugs :oops: -> korrigiert |
Re: Datei nummeriert speichern
Aber es sind ja nicht immer nur 2 Stellen, die wegkommen, da müsste man evtl. noch mit pos die erste Leerstelle herausfinden.
|
Re: Datei nummeriert speichern
:wall: natürlich... :oops:
Ist ja auch noch mitten in der Nacht :stupid: |
Re: Datei nummeriert speichern
hallo,
also zu eurer Info, es geht hier um die Heidenhein-Programmiersprache mit der werden CNC-maschinen programmiert und zum editieren sollen natürlich die Zeilennummern nicht angezeigt werden aber nachher in der gespeicherten Datei schon wieder. Da die Maschine das für eine GOTO funktion benötigt. Habt ihr da echt keine schnelle Lösung habe da ein DOS-Programm und da geht das wie aus der Pistole geschossen oder ist am Ende Delphi schlechter wie manches DOS programm? *g* Danke für eure Antworten |
Re: Datei nummeriert speichern
Der Code hat gerade 15.000 Zeile in unter 1 Sek. eingelesen (und das auf einer AMD Möhre!)
|
Re: Datei nummeriert speichern
Und damit klappt's auch mit dem Nachbarn:
Delphi-Quellcode:
Var
flStrList : TStringList; DeinFileName : String; Zahl, StartPos : Integer; Begin If Not opendialog1.Execute Then Exit; DeinFileName := OpenDialog1.FileName; flStrList := TStringList.Create; Try flStrList.LoadFromFile(DeinFileName); Zahl := 0; While Zahl < pred(flStrList.Count) Do Begin // ladenP.Position := zahl; StartPos := Pos(#32, flStrList[Zahl]); inc(StartPOs); flStrList[Zahl] := Copy(flStrList[Zahl], StartPos, Length(flStrList[Zahl])); inc(Zahl); End; SynMemo1.Lines.Assign(flStrList); Finally FreeAndNil(flStrList); End; |
Re: Datei nummeriert speichern
hallo Robert,
da geht es nicht um 15000 Zeile sondern um runde 2,5 Mio. Zeile weil dieser Text von AutoCAD kommt trotzdem probiere ich es nochmal danke für dein posting! |
Re: Datei nummeriert speichern
hallo Robert,
also hab des nochmal probiert funktioniert wunderbar!!! Wirklich toll danke! Aber ich kenn mich da net ganz so aus also fällt mir des schwer das ganze wieder mit nummern zu speichern kannst du mir da nochmal helfen? Danke |
Re: Datei nummeriert speichern
Beim Speichern musst du einfach nur andersherum denken...
Für DupeString musst du die Unit StrUtils in die Uses-Clause aufnehmen.
Delphi-Quellcode:
... wenn du den Text nicht unbeding perfekt eingerückt (hier 7 Stellen) brauchst, kannst du anstatt "DupeString..." auch ein #32 nehmen.
Var
flStrList : TStringList; DeinFileName : String; Zahl : Integer; Begin If Not Savedialog1.Execute Then Exit; DeinFileName := Savedialog1.FileName; flStrList := TStringList.Create; Try flStrList.Assign(SynMemo1.Lines); Zahl := 0; While zahl < pred(flStrList.Count) Do Begin flStrList[Zahl] := IntToStr(succ(Zahl)) + DupeString(#32, 7 - Length(IntToStr(succ(Zahl)))) + flStrList[Zahl]; inc(Zahl); End; flStrList.SaveToFile(DeinFileName); Finally FreeAndNil(flStrList); End; Nachtrag: Wenn du den Text ausrichtest, musst du beim Einlesen diesen Wert verwenden (anstatt "Pos(#32, flStrList[Zahl])") -> sonst sieht man die ganzen Leerzeichen. |
Re: Datei nummeriert speichern
Hi!
Probier mal, ob das geht:
Delphi-Quellcode:
Ich hoffe, dass der Code in Ordnung ist. Habe mich noch nicht so wirklich damit auseinandersetzen können. Falls Fehler drin sind, oder die Vorgehensweise nicht ok ist, sagt Bescheid.
procedure TForm1.Button1Click(Sender: TObject);
var i: integer; strlist: Tstringlist; begin i:=0; strlist := TStringList.Create; Try StrList.Assign(Synmemo1.Lines); Synmemo1.Clear; While i <= pred(StrList.Count) Do begin synmemo1.Lines.Add(inttostr(i+1)+' '+Strlist[i]); i:=i+1; end; Finally FreeAndNil(StrList); end; end; Ciao fkerber Edit: a) zu langsam b) @Robert_G: Ist mein Code in Ordnung, oder nicht empfehlenswert? |
Re: Datei nummeriert speichern
Zitat:
in der Delphiholfe steht folgendes: Zitat:
P.s.: Will ja nicht nur den code kopieren sondern ihn auch verstehen *g* was ja manche nicht so nehmen |
Re: Datei nummeriert speichern
DupeString('Hallo', n) wiederholt einen String ('Hallo') n-mal.
#32 ist der ASCII-Code für ein Leerzeichen, ich verwende selten ' ' in meinem Code(außer bei SQL-Statements), da man beim schnellen Durchscrollen nicht sofort sieht ob da nicht jemand einen Tab (#9) reingesetzt hat. succ(Zahl) liefert den Nachfolger pred(Zahl) -"- Vorgänger inc(Zah) entspricht: Zahl := Zahl + 1; dec(Zah) entspricht: Zahl := Zahl - 1; Length(IntToStr(Zahl)) gibt dir die Länge von "Zahl" DupeString(#32, 7 - Length(IntToStr(succ(Zahl)))) gibt dir deshalb: 7 - "Länge von Zahl" Leerzeichen. Das meinte ich mit einrücken: Im SynMemo:
Code:
in der Datei
CREATE OR REPLACE TRIGGER ctsdd.rule_change
before update or delete of object_id on ctsdd.rule for each row BEGIN IF updating THEN UPDATE ctsdd.extended_rule
Code:
15646 CREATE OR REPLACE TRIGGER ctsdd.rule_change
15647 before update or delete of object_id on ctsdd.rule 15648 for each row 15649 BEGIN 15650 15651 IF updating THEN 15652 UPDATE ctsdd.extended_rule |
Re: Datei nummeriert speichern
hi, danke für die lange Erklärung nett von dir!
Eine Frage bleibt noch offen wie mache ich es dass er immer bei der Nummerierung mit 0 anfängt (dass ist ganz wichtig)! hab da das schon so probiert:
Delphi-Quellcode:
aber er fängt trotzdem bei 1 an. Warum?Var flStrList : TStringList; DeinFileName : String; Zahl : Integer; Begin If Not form1.Savedialog1.Execute Then Exit; DeinFileName := form1.Savedialog1.FileName; flStrList := TStringList.Create; Try flStrList.Assign(form1.SynMemo1.Lines); Zahl := -1; While zahl < pred(flStrList.Count) Do Begin inc(Zahl); flStrList[Zahl] := IntToStr(succ(Zahl)) + DupeString(#32, 7 - Length(IntToStr(succ(Zahl)))) + flStrList[Zahl]; End; flStrList.SaveToFile(DeinFileName); Finally FreeAndNil(flStrList); End; Danke |
Re: Datei nummeriert speichern
Hi!
Ich glaube, es müsste so heißen;
Delphi-Quellcode:
ciao fkerber
Try
flStrList.Assign(form1.SynMemo1.Lines); Zahl := 0; While zahl < pred(flStrList.Count) Do Begin inc(Zahl); flStrList[Zahl] := IntToStr(Zahl) + //<-- hier DupeString(#32, 7 - Length(IntToStr(succ(Zahl)))) + flStrList[Zahl]; |
Re: Datei nummeriert speichern
Zitat:
Hallo, also hab jetzt mal a bisserl hin und her probiert und jetzt funzt diese Procedur oben schon recht gut nur sollten jetzt keine einrückungen mehr beachtet werden also aus dem:
Code:
soll das werden:
15647 before update or delete of object_id on ctsdd.rule
15648 for each row 15649 BEGIN 15650 15651 IF updating THEN 15652 UPDATE ctsdd.extended_rule
Code:
nun ist die frage, geht das mit diesem misteriösen "-7" :witch: oder wie soll ich das anfangem? Ich habe da echt null peil
15647 before update or delete of object_id on ctsdd.rule
15648 for each row 15649 BEGIN 15650 15651 IF updating THEN 15652 UPDATE ctsdd.extended_rule Danke für eure Hilfe Gruß Andy |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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