[Delphi] Problemy z komendami iRUKi

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

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

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();

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

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.

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…

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

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…

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.

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

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.

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;

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.

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:

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.

Windows? Zasoby.

W Linuksie bodaj nie ma takiego mechanizmu.