AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Punkte in Dateinamen ersetzen.

Ein Thema von Sanguis · begonnen am 23. Okt 2010 · letzter Beitrag vom 23. Okt 2010
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#11

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 17:53
bitte gegf. anpassen
Delphi-Quellcode:

Function ReplaceAllWHatIDontWannaHave(const s:String):String;
var
  i:Integer;
  IsInBreak:Boolean;
  Procedure Resultadd(c:Char);
    begin
      if not IsInBreak then Result := Result + c;
    end;
begin
  IsInBreak := false;
  for I := 1 to LastDelimiter('.',s)-1 do
    begin
      if s[i] ='.then ResultAdd(' ')
      else if s[i] ='(then IsInBreak := true
      else if s[i] =')then IsInBreak := False
      else ResultAdd(s[i]);
    end;
  Result := Result + ExtractFileExt(s);
end;
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#12

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 17:57
Ok, PosEx war mir neu (ratet mal was ich fand, als ich grad bei Google danach suchte ).

Also ermittel ich mit Pos erst ab wann das erste Mal '(' auftaucht. Mit PosEx dann das erste Auftauchen von ')' und für delete brauch ich dann noch den Pos Wert - den PosEx Wert, weil delete (laut google) nur Zeichenlängen übernimmt, keine Delemiter. Hab ich so richtig gedacht?

Gruss,
Andreas
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#13

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 18:05
Ne, nicht ganz richtig verstanden. Das erste Pos ermittelt eben die Position des ersten Zeichens. Das wäre dann in der Richtung : Anfang := Pos (st,'('); Ende der Klammer : Ende := Pos (st,')'); Alles zwischen den Klammern löschen : delete (st,Anfang, Ende); Wie gesagt : Besser F1 drücken, da steht sowieso alles ausführlich drin.
Gruß
Hansa
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#14

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 18:09
Moin Zusammen,

man kann das natürlich auch alles mit Pos, PosEx und Copy machen, läuft dann aber Gefahr strings oft in der Länge zu ändern, was, je nach Anzahl, auch auf die Performace drücken kann.
Ich würd's so lösen:


Delphi-Quellcode:
function RemoveBetween(const AsValue : string;const AOpenChar : char = '(';const ACloseChar : Char = ')') : string;

var
  iIndexIn : Integer;
  iIndexOut : Integer;
  iState : Integer;

begin
  SetLength(Result,Length(AsValue));
  iIndexIn := 1;
  iIndexOut := 0;
  iState := 1;
  while iIndexIn <= Length(AsValue) do begin
    case iState of
      1 : begin // Alles bis zum AOpenChar übernehmen
        if AsValue[iIndexIn] <> AOpenChar then begin
          Inc(iIndexOut);
          Result[iIndexOut] := AsValue[iIndexIn];
        end else begin
          iState := 2;
        end;
      end;
      2 : begin // Alles bis zum ACloseChar ignorieren
        if AsValue[iIndexIn] = ACloseChar then begin
          iState := 1;
        end;
      end;
    end;
    Inc(iIndexIn);
  end;
  SetLength(Result,iIndexOut);
end;
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#15

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 18:10
bitte gegf. anpassen
Delphi-Quellcode:

Function ReplaceAllWHatIDontWannaHave(const s:String):String;
var
  i:Integer;
  IsInBreak:Boolean;
  Procedure Resultadd(c:Char);
    begin
      if not IsInBreak then Result := Result + c;
    end;
begin
  IsInBreak := false;
  for I := 1 to LastDelimiter('.',s)-1 do
    begin
      if s[i] ='.then ResultAdd(' ')
      else if s[i] ='(then IsInBreak := true
      else if s[i] =')then IsInBreak := False
      else ResultAdd(s[i]);
    end;
  Result := Result + ExtractFileExt(s);
end;
Danke, das hilft mir sehr. Funktioniert prima! Danke .

Diese Aufforderung käme mit 100% Sicherheit sowieso in nächster Zeit.
Ich weiss... aber bei Delphi 3 hab ich mich mit Stringoperationen zum letzten Mal intensiv beschäftigt. Danach war ich größtenteils durch DB Programmierung ausgelastet. Da wurschtelt man zwar auch mit Strings rum, aber eher in der DB Syntax. Und seit Delphi3 hat sich einiges verändert. Sorry für die vermeintlich einfachen Fragen. Aber wenn man so davor sitzt, kommt auf naheliegendes manchmal nicht.
Danke für die Hilfe jedenfalls .

Gruss,
Andreas
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#16

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 18:23
Ja ja, ist schon klar. Man fragt einfach mal, bevor man selber mal guckt.

Bei dem bisher angesprochenen gilt das hier aber nicht :

Und seit Delphi3 hat sich einiges verändert.
pos und delete gibts schon ewig. Zumindest sehr lange vor D3.
Gruß
Hansa
  Mit Zitat antworten Zitat
Sanguis

Registriert seit: 20. Jul 2005
Ort: Essen
146 Beiträge
 
#17

AW: Punkte in Dateinamen ersetzen.

  Alt 23. Okt 2010, 18:32
Ja ja, ist schon klar. Man fragt einfach mal, bevor man selber mal guckt.
Nicht mein Stil. Ich hab Stundenlang gesucht, aber nur was gefunden, um eine vorgegebene Zeichenkette zu löschen. Aber nicht als von-bis.

Zitat:
pos und delete gibts schon ewig. Zumindest sehr lange vor D3.
Japp, deshalb wusste ich ja auch das es in der Richtung sein muss. Nur die Logik dafür, wie es in meinem Fall genau geht, war mir nicht klar.
Übrigens, PosEx gab es in Delphi3 definitiv noch nicht .
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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:58 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