AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Add Leerzeichen nach gelöschten POS?
Thema durchsuchen
Ansicht
Themen-Optionen

Add Leerzeichen nach gelöschten POS?

Ein Thema von danku · begonnen am 29. Apr 2006 · letzter Beitrag vom 1. Mai 2006
Antwort Antwort
Benutzerbild von danku
danku

Registriert seit: 9. Apr 2006
Ort: 32-bit Adressbus
181 Beiträge
 
Delphi 7 Enterprise
 
#1

Add Leerzeichen nach gelöschten POS?

  Alt 29. Apr 2006, 14:46
wie kann ich erreichen das die komplette stringgrid "durchcompiliert" wird und die leerzeichen gelöscht werden?

Delphi-Quellcode:
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;
problem1:
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?
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

Re: Jump to Next Zeile // Replace Prozedur oder Add Leerzeic

  Alt 29. Apr 2006, 16:57
Ich hoffe doch mal das GetPosNumX soll sowas wie PosEx sein?

dann würde ich dir mal raten dieses
for zaehlen := 0 to length(S) do in
for zaehlen := length(S) downto 1 do Zeichen 0 wird's nicht geben
und wenn du löschts, dann verändert sich die Länge (daher rückwärts zählen)

und das ganze:
Delphi-Quellcode:
for zaehlen := 0 to length(S) do
begin
  Position := GetPosNumX(Search_Text, S, Position);
  Delete(S, Position, length(Search_Text));
end;
wobei es wohl so efektiver wäre (obwohl StringReplace wohl wirklich besser wär):
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;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
marabu

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

Re: Jump to Next Zeile // Replace Prozedur oder Add Leerzeic

  Alt 29. Apr 2006, 17:34
Hi.

Damit auch wirklich jede Zelle untersucht wird, musst du natürlich auch den Spalten- und Zeilenindex richtig setzen:

Delphi-Quellcode:
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;
Statt meiner Funktion ReplaceAll() kannst du auch StringReplace() aus der Unit SysUtils verwenden.

Grüße vom marabu

Nachtrag: Falls es mal wieder länger dauert ist ReplaceAll() vielleicht doch schneller:

Delphi-Quellcode:
// 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;
Und hier noch FindAll():

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;
  Mit Zitat antworten Zitat
Benutzerbild von danku
danku

Registriert seit: 9. Apr 2006
Ort: 32-bit Adressbus
181 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Jump to Next Zeile // Replace Prozedur oder Add Leerzeic

  Alt 30. Apr 2006, 10:05
jo vielen dank für die schnelle antwort.
das das problem so komplex ist hätte ich nicht gedacht
merci
wenn das proggie fertig ist werde ich euch zuerst schicken wenn ihr wollt

Edit: Woran liegt das eigentlich, sobald man opendialog1.filename schreibt,
dass der ganze pfad aufgelistet wird?

bsp: drum_n_bass.mp3 ausgewählt per opendialog
D:\Musik\drum_n_bass.mp3 wird in die stringgrid übernommen
  Mit Zitat antworten Zitat
Klaus01

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

Re: Add Leerzeichen nach gelöschten POS?

  Alt 30. Apr 2006, 15:40
weil das so definiert ist:

Auszug aus der Delphi Hilfe:

Zitat:
property FileName: TFileName;

Description

The FileName property returns the name and complete directory path of the most recently selected file. The value of FileName is the same as the first item in the Files property.
Wenn Du nur den Filenamen haben willst, mußt Du in extrahieren.
Dazu findest Du hier aber mindestens einen Thread der sich damit beschäftigt.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
marabu

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

Re: Add Leerzeichen nach gelöschten POS?

  Alt 30. Apr 2006, 18:14
Du suchst ExtractFileName():

Delphi-Quellcode:
begin
  if ExtractFileName('D:\Musik\drum_n_bass.mp3') = 'drum_n_bass.mp3then
    ShowMessage('na bitte - geht doch');
end;
marabu
  Mit Zitat antworten Zitat
Benutzerbild von danku
danku

Registriert seit: 9. Apr 2006
Ort: 32-bit Adressbus
181 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Add Leerzeichen nach gelöschten POS?

  Alt 1. Mai 2006, 11:46
und wie kann ich erreichen das man den pfad weg bekommt?
ich will doch nur in die zellen die audiodateien ohne den pfad.
  Mit Zitat antworten Zitat
Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Add Leerzeichen nach gelöschten POS?

  Alt 1. Mai 2006, 11:52
Hallo danku,

marabu hat dir die Funktion doch bereits genannt. Hast du schon in der Online-Hilfe nachgesehen, was die Funktion Delphi-Referenz durchsuchenExtractFileName macht?

Gruß Hawkeye
  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 17:18 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