Wczytywanie śmieci zamiast pliku.

0

Siema. Mam banalny błąd ale nie potrafie sobie z nim już poradzić. Chce wczytać stronę html. Na podstawie przykładów z 4p zrobiłem zdarzenie na klik buttona które wygląda tak :

 begin
  if not FileExists('t.htm') then
    ShowMessage('Sry, plik nie istnieje :/')
  else
    begin
      data := TStringList.Create;
      data.LoadFromFile('t.htm');
      ShowMessage(data.Strings[2]);
    end
end;        

gdzie

var

  ffile : Text;
  data : TStringList;  

Natomiast po wykonaniu procedury - wczytuje się poprawna ilość lini ale :

-Pierwsza linia to zawsze dwa pytajniki I pierwsza litera z linii ( ??h przy hello world lub ??< przy pliku html)
-Kolejne linie ( poprawna ilość ) są puste.

Prosze o podpowiedz co robie źle że nie udaje się wczytanie. Wiele razy wczytywałem plik w C, C++, C# czy Pythonie I sądziłem, że to banalne a jednak nie ;p

Z gory dzieki.

0

@marogo - chyba źle używasz mechanizmu komentów ;p

co do tematu - Lazarus 1.0.6 FreePascal 2.6.0 Windows 8 64 bit

0

Lazarusa nie mam akurat pod ręką, ale może problem wynika z kodowania wczytywanych znaków, np. UTF8 lub Unicode. Np. w Delphi od wersji 2009 metoda LoadFromFile klasy TStringList ma drugi (opcjonalny) parametr określający kodowanie wczytywanego tekstu. Może w Lazarusie jest podobnie.

0

Na sam początek na pewno wykonaj aktualizację Lazarusa oraz ew.ręcznie skompiluj i zaktualizuj FPC do wersji 2.6.3/2.7.0 (zależy, co wolisz; 2.6.3 jest w-miarę stabilne, 2.7.0 jest bardziej nightly-buildem).
Jeżeli problem będzie nadal występował, sprawdź, czy na początku pliku nie ma np.znacznika BOM lub czegoś podobnego.

0

Niestety po aktualizacji lazarusa I freepascala nadal mam ten sam problem ( + przestało działać połączenie z Firebirdem XD ). Możecie może zarzucić kodem który działa u was to sprawdzę u siebie ?? Dodam, że jest to zdarzenie pod przyciskiem na formie gdzie jest grid i pare komponentów DB, jednak nie wiem jakie ma to znaczenie....

1

A te pytajniki to nie przypadkiem BOM od UTF-8? W Delphi nie robiłem zbyt wiele i nie wiem w jakim kodowaniu wczytuje. Użyj notepad++ do podejrzenia i ew. konwersji kodowania pliku

0
serge napisał(a)

Możecie może zarzucić kodem który działa u was to sprawdzę u siebie ??

Ten kod, który masz, powinien działać :P


Zapewne na początku pliku występuje znacznik BOM - otwórz ten plik hex-edytorem i zobacz, czy pierwsze dwa lub trzy bajty będą pasować do tego znacznika (sprawdź na Wiki, jakie to bajty są). Jeżeli tak, to zapewne będziesz musiał je po prostu usunąć stamtąd lub zmodyfikować metodę `LoadFromFile`, aby brała pod uwagę marker BOM.
0

Racja, to wina BOM. Mogę to sam obsłużyć, chyba ze w jakimś komponencie to już jest zrobione to po co wynajdywać koło raz drugi ? Mogę liczyć na podpowiedz ? Jak usunąłem BOM to wczytuje prawidłowo. Dzięki

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