![]() |
Add Leerzeichen nach gelöschten POS?
wie kann ich erreichen das die komplette stringgrid "durchcompiliert" wird und die leerzeichen gelöscht werden?
Delphi-Quellcode:
problem1:
if rgmenue.ItemIndex = 0
then begin PROBLEM 1 for i:= 0 to 1000 do //Komplett search_text in Zelle gelöscht ->beschleunigt abschnittsw. l. begin Position := 1; S := sgfiles.Cells[0,1]; for zaehlen := 0 to length(S) do //search_text abschnittsweise löschen begin //Position des Search_Text ('_') Position := GetPosNumX(Search_Text, S, Position); //Löscht diese Stelle Delete(S, Position, length(Search_Text)); PROBLEM 2 end; sgfiles.Cells[0,1]:= S; inc(a,i); end; ///// Löschen for i:= 0 to 1000 do begin Position := 1; S := sgfiles.Cells[0,1]; for zaehlen := 0 to length(S) do begin Position := GetPosNumX(Search_Text, S, Position); Delete(S, Position, length(Search_Text)); end; sgfiles.Cells[0,1]:= S; inc(a,i); end; Es wird jeweils zuerst nur in der Zelle nach dem (Search_Text = '_') gesucht und dieser gelöscht. aber das passiert nur abschnittsweise. und nicht in der gesamten zelle komplett. problem2: wäre es besser eine replace-prozedur zur schreiben, um '_' durch '' zu ersetzen oder doch lieber bei meiner jetzigen variante und dann noch nach dem löschen ein leerzeichen dazuzufügen? |
Re: Jump to Next Zeile // Replace Prozedur oder Add Leerzeic
Ich hoffe doch mal das GetPosNumX soll sowas wie PosEx sein?
dann würde ich dir mal raten dieses
Delphi-Quellcode:
in
for zaehlen := 0 to length(S) do
Delphi-Quellcode:
Zeichen 0 wird's nicht geben
for zaehlen := length(S) downto 1 do
und wenn du löschts, dann verändert sich die Länge (daher rückwärts zählen) und das ganze:
Delphi-Quellcode:
wobei es wohl so efektiver wäre (obwohl StringReplace wohl wirklich besser wär):
for zaehlen := 0 to length(S) do
begin Position := GetPosNumX(Search_Text, S, Position); Delete(S, Position, length(Search_Text)); end;
Delphi-Quellcode:
Position := Pos(Search_Text, S);
while Position > 0 do begin Delete(S, Position, length(Search_Text)); Position := PosEx(Search_Text, S, Position + 1); end; |
Re: Jump to Next Zeile // Replace Prozedur oder Add Leerzeic
Hi.
Damit auch wirklich jede Zelle untersucht wird, musst du natürlich auch den Spalten- und Zeilenindex richtig setzen:
Delphi-Quellcode:
Statt meiner Funktion ReplaceAll() kannst du auch StringReplace() aus der Unit SysUtils verwenden.
procedure StringGridReplace(sg: TSTringGrid; const sFrom, sTo: String);
var iCol, iRow: Integer; begin with sg do for iCol := FixedCols to Pred(ColCount) do for iRow := FixedRows to Pred(RowCount) do Cells[iCol, iRow] := ReplaceAll(Cells[iCol, iRow], sFrom, sTo); end; Grüße vom marabu Nachtrag: Falls es mal wieder länger dauert ist ReplaceAll() vielleicht doch schneller:
Delphi-Quellcode:
Und hier noch FindAll():
// uses Types;
function ReplaceAll(const s, sFrom, sTo: String): String; var ida: TIntegerDynArray; i, iIn, iOut, iPos, iLength: Integer; begin ida := FindAll(s, sFrom); iLength := Length(s) + Length(ida) * (Length(sTo) - Length(sFrom)); SetLength(Result, iLength); iIn := 1; iOut := 1; for i := Low(ida) to High(ida) do begin iPos := ida[i]; iLength := iPos - iIn; Move(s[iIn], Result[iOut], iLength); Inc(iOut, iLength); Move(sTo[1], Result[iOut], Length(sTo)); Inc(iOut, Length(sTo)); Inc(iIn, iLength + Length(sFrom)); end; if iIn <= Length(s) then Move(s[iIn], Result[iOut], Succ(Length(s) - iIn)); end;
Delphi-Quellcode:
// uses Types, StrUtils;
function FindAll(const s, substr: String): TIntegerDynArray; var iPos: Integer; begin SetLength(Result, 0); iPos := 1; repeat iPos := PosEx(substr, s, iPos); if iPos > 0 then begin SetLength(Result, Succ(Length(Result))); Result[High(Result)] := iPos; Inc(iPos, Length(substr)); end until iPos = 0; end; |
Re: Jump to Next Zeile // Replace Prozedur oder Add Leerzeic
jo vielen dank für die schnelle antwort.
das das problem so komplex ist hätte ich nicht gedacht :cyclops: merci :thumb: wenn das proggie fertig ist :coder: werde ich euch zuerst schicken wenn ihr wollt Edit: Woran liegt das eigentlich, sobald man opendialog1.filename schreibt, dass der ganze pfad aufgelistet wird? :gruebel: bsp: drum_n_bass.mp3 ausgewählt per opendialog D:\Musik\drum_n_bass.mp3 wird in die stringgrid übernommen |
Re: Add Leerzeichen nach gelöschten POS?
weil das so definiert ist:
Auszug aus der Delphi Hilfe: Zitat:
Dazu findest Du hier aber mindestens einen Thread der sich damit beschäftigt. Grüße Klaus |
Re: Add Leerzeichen nach gelöschten POS?
Du suchst ExtractFileName():
Delphi-Quellcode:
marabu
begin
if ExtractFileName('D:\Musik\drum_n_bass.mp3') = 'drum_n_bass.mp3' then ShowMessage('na bitte - geht doch'); end; |
Re: Add Leerzeichen nach gelöschten POS?
und wie kann ich erreichen das man den pfad weg bekommt?
ich will doch nur in die zellen die audiodateien ohne den pfad. |
Re: Add Leerzeichen nach gelöschten POS?
Hallo danku,
marabu hat dir die Funktion doch bereits genannt. Hast du schon in der Online-Hilfe nachgesehen, was die Funktion ![]() Gruß Hawkeye |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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