Sprawdzanie EXT'ka

Odpowiedz Nowy wątek
2004-06-14 18:07
0

Jak sprawdzić czy string zawiera po kropce rozszerzenie i jesli tak to je usunąc. Oczywiści może on zawierać kropke po której będzie takst (także 3literowy).

Np:
stringa zawiera 'costam.txt' - czyli jest rozpoznawany jako plik i chcę dciąć od niego rozszerzenie
ale jak zawiera
'costam' - to tylko do niego dokleję rozszerzenie
ale
'costam.qpa' - tez nie jest jako plik.

Co zrobić w takiej sytaucji? Czy jedynym wyjściem jest strworzenie tablicy ze wszystkimi rozszerzeniami i prównywanie? Jeśli tak to jak pobrac wszystkie zarejestrowane rozszerzenia?


7

Pozostało 580 znaków

2004-06-14 18:12
0

Rozumiem, że chcesz odciąć rozszerzenie, niezależnie od tego, jakie jest? Jeśli tak, to po prostu robisz Delete(nazwa, pos('.', nazwa), length(nazwa)-pos('.', nazwa)+1); i już. A jeśli inaczej, to niebardzo rozumiem, o co chodzi...


Grunt to uziemienie...

Pozostało 580 znaków

2004-06-14 18:23
0

no to jeszcze nie do końca to.

Załóżmy, że string zawiera tekst 'plik.txt'. Jak wiadomo txt jest rozszerzeniem, więc chcę je odciąć.

Załóżmy, że string zawiera tekst 'plik'. Jak wiadomo nie ma tu rozszerzenia, więc zostawiam to w takiej postaci.

Załóżmy, że string zawiera tekst 'plik.pvv'. Jak wiadomo (najprawdopodobniej) pvv nie jest rozszerzeniem, więc też chce zostawić w takiej postaci jak jest.


7

Pozostało 580 znaków

2004-06-14 18:24
0

Można porównywać.
Metodą ExtractFileExt(nazwapliku) (czy coś takiego) można odciąć to co jest po kropce w stringu. A porównać tak (wsyzstkie rozszerzenia są w HKCR):

procedure TForm1.Button1Click(Sender:TObject);
var rejestr:TRegistry;
 nazwapliku,rozszerzenie:string;
begin
 nazwapliku:=Edit1.Text;
 rozszerzenie:=ExtractFileExt(nazwapliku);
 rejestr:=TRegistry.Create;
 rejestr.RootKey:=HKEY_CLASSES_ROOT;
 if rejestr.KeyExists('.'+rozszerzenie) then ShowMessage('Wpisałeś rozszerzenie') else ShowMessage('Z czym do kogo ? Rozszerzenie zarejestrowane w tym systemie wpisz lepiej :)');
 rejestr.Free;
end;

Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2004-06-14 20:29
0

wejdz do HK_Classes_Root i pobierz wszystkie klucze i zobacz czy extractfileext(jakisstring) jest w tstrings z kluczami jesli nie to exit; jesli tak to copy() itd. powinno zadziałać

Pozostało 580 znaków

2004-06-14 20:34
0

Ale to bez sensu takie kombinacje. Co znaczy, że jesli plik kończy się na .pvv, to prawdopodobnie nie jest ro rozszerzeniem?? Zawsze rozszerzenie to tekst po ostatniej kropce. Czyli ExtractFileExt() wystarczy.

Pozostało 580 znaków

2004-06-15 12:12
0

No moze nie zawsze, bo jak nazwie Nazwa.Pliku to też bedzie bez.. ale zawsze można zrobić warunek: po ostatniej kropce i max. 3 literowe.. - chyba najlepiej..


Pozostało 580 znaków

2004-06-15 16:14
0

->a myślałeś o tym ze rozszerzenie moze mieć więcej znaków choćby '.manifest'.
->moze <ort>użytkownik </ort>podać stringa typu 'cośtam.ppp' i ppp to nie rozszerzenie,to co wtedy?

Pozostało 580 znaków

2004-06-15 16:18
0

Nie to jeszcze nie to!!

Może napisze tak:

Chce pobrać liste wszystkich zarejestrowanych rozszerzeń w systemie. Załóżmy, że do TStrings. Nastepnie sprawdzam, czy po kropce (jęsli ta istnieje) w stringu jest rozszerzenie, które zostało zarejestrowane.

Np.:
'tekst.txt' - TXT jest zarejestrowanym rozszerzeniem, więc chce je odciąć (także z kropką).
'tekst' - nie ma tu krokpi, więc o drazu pozostawaim strinbga w takiej postaci
'tekst.komputer' - jest kropka jednak po niej nie wystepuje rozszerzenie (no chyba że zostało takie zarejestrowane, ale najprawdopodobniej nie), wiec to też zostawiam w takiej postaci
'tekst.prr' - j/w

mam nadzieję że teraz już wiecie o co mi chodzi. po prostu chcę pobrac zarejestrowane rozszerzenia i porównywacv je z częscią po kropce w sytringu, ktora nie konieczniej w nim wystepuje.


7

Pozostało 580 znaków

2004-06-15 16:21
0

No to odpowiedź już masz. Przykład z gotowym kodem. Czego jeszcze? Teraz tylko dodaj obcinanie tego rozszerzenia, jesli to jest rozszerzenie i masz...


Grunt to uziemienie...

Pozostało 580 znaków

2004-06-15 17:11
0
function GetExtensions: TStringList;
var
  I: Integer;
  Reg: TRegistry;
begin
  I := 0;
  Reg := TRegistry.Create;
  with Reg do
  begin
    RootKey := HKEY_CLASSES_ROOT;
    OpenKeyReadOnly('');
    Result := TStringList.Create;
    GetKeyNames(Result);
    Free;
  end;
  while I < Result.Count do
  begin
    if Result[I][1] <> '.' then
      Result.Delete(I) else Inc(I);
  end;
end;

procedure PrepareFName(var FName: string; var Exts: TStringList);
begin
  if Exts.IndexOf(ExtractFileExt(FName)) <> -1 then
    Delete(FName, Pos('.', FName), Length(FName));
end;

// przykład

var
  S: string;
  Sl: TStringList;
begin
  S := 'plik.txt';
  Sl := GetExtensions;
  PrepareFName(S, Sl);
  ShowMessage(S);
end;

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0