Wczytywanie znaków specjalnych do Stringa

0

Witam,

posiadam plik z 4 liniami. Każda z linii posiada jeden nietypowy znak. Przy wczytywaniu linii do Stringa odczyt zatrzymuje się na tym znaku specjalnym. Docelowo to muszę pozmieniać te znaki specjalne na polskie znaki. Przykładowo:

STANISťAW - STANISŁAW

Czy można działać bezpośrednio na pliku nie wczytując linii do Stringa?

Funckja Pos nie widzi tego znaku (ť) w stringu. Podobnie StringReplace. Brakuje mi pomysłu na wczytanie tego do zmiennej. Proszę o jakieś wskazówki.

2

ten plik masz w CP852 kodowany i trzeba to zamienić na kodowanie windowsa albo unicode jeśli chcesz, żeby Ci to delphi normalnie pokazało. Możesz to zrobić (zamianę) albo osobnym programem przed wczytaniem albo w delphi - tu masz przykład http://embarcadero.newsgroups.archived.at/public.delphi.ide/201101/11012512022.html

0
AssignFile(TF, 'C:\PLIK.txt');
  Reset(TF);
    while not eof(TF) do
    begin
      Readln(TF, S);
    end;
    CloseFile(TF);

    IBM852:= S;
    CP1250:= IBM852;
    StringReplace(CP1250,'«','ź',[rfReplaceAll]);
    ShowMessage(CP1250);

Mam taki oto kod, ale niestety nie działa. Co robię źle? Czy plik trzeba przekonwertować czy zmienną?

0

Mam taki oto kod, ale niestety nie działa.

Jak tak będziesz opisywał problem to nieprędko doczekasz się trafnej odpowiedzi;

Co robię źle? Czy plik trzeba przekonwertować czy zmienną?

A jakie kodowanie wykorzystane jest w tym pliku? Pobierz sobie Notepad++ i przekonwertuj na coś sensownego, tak jak już wcześniej zaproponował @abrakadaber.

0

Witam ponownie,

przekonwertowałem Notpad++ plik na kodowanie UTF 8. Plik w załączniku. Efekt jest taki, że Delphi już to "widzi", tzn. funkcja ShowMessage wyświetla znaki poprawnie. Niestety funkcja StringReplace nie zamienia znaków. Można jakoś inaczej zmieniać znaki w ciągu?

0

pisane z głowy , bez weryfikacji i kompilacji

ts:=tstriglist.create
ts.lodafromfile ('C:\PLIK.txt');
try
   for i:=0 to ts.count-1 do 
   begin
      StringReplace(ts[i],'«','ź',[rfReplaceAll]);
      ShowMessage(ts[i]);
   end 
finally
    ts.free
end
2

StringReplace to funkcja która zwraca ciąg ze zmienionymi znakami a więc:

ts[i]:=  StringReplace(ts[i],'«','ź',[rfReplaceAll]);

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