[Delphi] Problemy z komendami iRUKi


(Xszczepaniakx) #1

Witam :smiley:

To znowu ja :lol:

obecnie mój problem polega na tym iż zrobiłem program i wchodząc w niego daje opcje żeby wczytał mi plik TXT (tekst z niego) ale nie mogę wczytać np poszczególnej linijki tylko cały tekst..

proszę o pomoc


(Rkizeweter) #2

Ale podaj razem z kodem co zrobiłeś w związku z czym...


(system) #3

Właściwie to co chcesz zrobić to niezbyt eleganckie podejście, może lepiej wczytać cały plik do bufora a potem analizować?

Co najmniej wczytaj kawałek tekstu do bufora, przeanalizuj, wczytaj następny itd. Albo stwórz TStringList i użyj ReadFromFile();


(system) #4

Tak jak ty chcesz zrobić, to ja bym zrobił tak... Najpierw cały tekst bym wczytał do jednego, niewidocznego (VISIBLE = FALSE) np Memo. A potem do tego, gdzie już chcesz wczytać pojedynczą linijkę, to po prostu odpowiedni index linijki podajesz. Np Memo1.Text:=Memo2.Lines.Strings[3]; - taki przykład. Mam nadzieję, ze dobrze zrozumiałem,o co chodzi xD


(system) #5

Po cholerę tworzyć memo jeżeli całą funkcjonałność którą potrzebujesz zawiera TStringsList a właściwość Lines z TMemo to właśnie TStringsList.


(system) #6

o jejku, ja mu tylko doradziłem, tak jak mi przyszło do głowy... Ty możesz doradzać inaczej, i ja się do tego nie wtrącam...


(system) #7

To jest rada w stylu: Potrzebujesz zapalniczki? to tu za rogiem salon BMW, kup samochód a w nim zapalniczka, a samochód ukryjesz w garażu :lol:

Zaczynam się zastanawiać czy przypadkiem "adorator Symfonii" nie jest diagnozą. #-o


(system) #8

Proszę cię, daruj sobie swoje komentarze, bo nie jesteś, jak to się mówi "ALFA I OMEGA". Więc nie komentuj moich wypowiedzi, tak jak ja nie komentuję twoich...


(system) #9

Po to istnieje forum aby miedzy innymi komentować. Na forum prowadzi się dyskusja, jedynie ci którzy uważają siebie za "ALFA I OMEGA" nie znoszą komentarzy.


(system) #10

To przynajmniej skończ komentować to, w jaki sposób pomagam... Pomagam jak umiem, i ode mnie EOT...


(system) #11

Właśnie na tym polega problem z tobą, próbujesz pomagać ledwo znając temat. Aby zacząć pomagać trza znać się na temacie w miarę dobrze. A jak temat zna się powierzchownie to wychodzą rady tak jak ta powyżej lub ta z przysłowiową już Symfonią.

iRUKA , zobacz co znalazłem u siebie w archiwum :lol:

function ReadLine(Fs:TFileStream;var Line:String):Boolean;

var N,P:Integer;

var Buff:String;

const BuffSize=128;

begin

  SetLength(Line,0);

  SetLength(Buff,BuffSize);

  while true do

  begin

    N:=Fs.Read(Buff[1],BuffSize);

    if N<=0 then

    begin

      Result:=false;

      Exit;

    end;

    P:=Pos(#13#10,Buff);

    if (N
    if P>0 then

    begin

      Line:=Line+Copy(Buff,1,P-1);

      Fs.Seek(P+1-BuffSize,soFromCurrent);

      Break;

    end

    else Line:=Line+Buff;

  end;

  Result:=true;

end;


procedure ReadFileLineByLine(const FileName:String);

var Fs:TFileStream;

var Line:String;

begin

  Fs:=TFileStream.Create(FileName,fmOpenRead);

  try

    while ReadLine(Fs,Line) do

    begin

      ShowMessage(Line);

    end;

  finally

    Fs.Free;

  end;

end;

Tylko że to nie jest najlepsza metoda odczytu, program odczytuje nadmiar a potem się cofa. Najlepiej przerobić go conieco, stworzyć klasę dziedziczącą po TFileStream do której dodać bufor oraz jego bieżące wypełnienie. W metodzie, zostawiać resztę w buforze kasując to co dodało się do wiersza i na początku następnego odczytu dodać resztę z bufora do wiersza. Oczywiście należy też najpierw sprawdzić czy Line zawiera znak końca wiersza a jeżeli nie to doczytać kolejną porcje bajtów.


(Xszczepaniakx) #12
przepraszam ze tak późno opisuje mój problem bardziej szczegółowo

Zależy mi na tym aby plik który został załadowany i zainicjowany przy starcie programu nie wyświetlał teksu w Memo. Chodzi mi o to, żebym mógł go ręcznie modyfikować a następnie pobierać dane ale tylko wybrane i to nie do TMemo tylko do TEdita. Np. W pliku tekstowym wpisuje : - pierwsza linijka - druga - trzecia - czwarta itp. Potem Wciskam buttona i pobiera mi tylko napis "trzecia" i wyświetla w Tedit. A to kod ktorego użyłem do otwarcia:

var

    Text: TextFile;

  begin

    AssignFile(Text, ' //tu ścieżka pliku');

    try

      if FileExist('//Scieżka pliku')

        Reset(Text)

      else Rewrite(Text);

    finally

      CloseFile(Text);

    end;

  end;

(system) #13

To może zainteresuj się klasą TIniFile

Odczyt:

var WinIni:TIniFile;

begin

  WinIni:=TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));

  with WinIni do

  begin

    try 

      Edit1.Text:=ReadString('TForm1','Edit1',Edit1.Text);

      BoundsRect:=Bounds

      (

        ReadInteger('TForm1','FormLeft',Left),

        ReadInteger('TForm1','FormTop',Top),

        ReadInteger('TForm1','FormWidth',Width),

        ReadInteger('TForm1','FormHeight',Height)

      );

    finally

      Free;

    end;

  end;

end;

Zapis:

var WinIni:TIniFile;

begin

  WinIni:=TIniFile.Create(ChangeFileExt(ParamStr(0),'.ini'));

  with WinIni do

  begin

    try 

      WriteString('TForm1','Edit1',Edit1.Text);

      WriteInteger('TForm1','FormLeft',Left);

      WriteInteger('TForm1','FormTop',Top);

      WriteInteger('TForm1','FormWidth',Width);

      WriteInteger('TForm1','FormHeight',Height);

    finally

      Free;

    end;

  end;

end;

Plik będzie wyglądał:

[TForm1]

Edit1=Zapisany Tekst

FormLeft=100

FormTop=150

FormWidth=300

FormHeight=200

Dla drugiej formy tez możesz pisać w tym samym pliku.


(Xszczepaniakx) #14

dziękuje za pomoc :slight_smile:

wszystkie komendy podane przez was przydają mi się wiec niema co sie kłócić :wink:

zrobię z tego tematu główny watek w którym będę zadawał swoje pytania wiec jeśli można to w razie czego zajrzyjcie tu :wink:


(Xszczepaniakx) #15

Witam.

Mam pewien problem.

Po skompilowaniu i zbudowaniu programu podczas uruchomienia wyskakuje mi błąd.

Błąd ten dotyczy braku plików tła i ikon.

Jak mogę dołączyć pliki obrazów na stałe do programu, aby cała aplikacja zawierała się

wyłącznie w jednym pliku wykonywalnym?

Program działa u mnie bez problemów ale u innych osób szuka pliku z mojego dysku.

Zależy mi na tym aby w ogóle nie wyszukiwał potrzebnych plików tła i ikony tylko przy odpaleniu

aplikacji (składającej się z jednego pliku) automatycznie się wszystko wyświetliło.

Z góry dziękuję i pozdrawiam.


(Fiołek) #16

Windows? Zasoby.

W Linuksie bodaj nie ma takiego mechanizmu.