Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Lazarus/Delphi - Prosty terminal wykrywanie nowej linii

el_beton 10 Cze 2017 19:39 777 6
  • #1 10 Cze 2017 19:39
    el_beton
    Poziom 14  

    Zrobiłem sobie taki prosty terminal w Lazarusie i mam jeden mały problem bo Lazarusa znam prawie wcale otóż potrzeba mi wypisywać w Memo linie z portu szeregowego tak jak występują znaki końca linii w terminalu tak ma się stworzyć linia Memo. Teraz natomiast tworzę linię w Memo jak tylko obiorę dane z portu szeregowego problem w tym, że nie pokrywają się ze znakami końca linii. Proszę o małą pomoc w zmianie w funkcji wypisywania danych w Memo z uwzględnieniem tego, że jedna linia w Memo to dane z portu szeregowego do znaku końca linii.

    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    Lazarus/Delphi - Prosty terminal wykrywanie nowej linii

    Jest jak widać po lewej natomiast powinno być tak jak po prawej.

    0 6
  • #2 11 Cze 2017 07:27
    lukas_gab
    Poziom 15  

    Cześć.

    Robisz to odrobinę źle. W trybie ciągłym dodajesz kolejne linie na podstawie odczytanych danych. Powinieneś w tej funkcji kopiować odczytane dane do pomocniczego stringa, przeanalizować, czy znajduje się tam znak końca linii, jeżeli tak, to podzielić go na dwa stringi, jednego dokleić do ostatniej linii, a drugiego dodać jako nową linie. Niestety nie masz tego parsowania a swoim kodzie, a dane nie są czytane do końca linii, tylko może przychodzić kawałkami. Inny sposób to wkładanie do pomocniczego bufora do wykrycia znaku końcu linii i dopiero wtedy dodawać nową linie - nieco mniej skomplikowany algorytm to jest - przemyśl i zdecyduj co wolisz zaimplementować. Z racji, że jesteś początkującym w Lazarusie/Pascalu (nie wiem jak ogólnie z programowaniem) to nie proponuje metody wielowątkowej czy asynchroniczności, bo tak naprawdę można tutaj wszystko zrobić synchronicznie w jednym wątku i spełni to wymagania sądzę.

    0
  • #3 11 Cze 2017 14:09
    el_beton
    Poziom 14  

    To, że trzeba przetrawić stringi z portu szeregowego to wiem tylko właśnie problem, że na szybko nie znam pascalowskich funkcji do cięcia stringów bo tu zupełnie wszystko inaczej niż w C. Prosiłbym o pomoc w zmianie funkcji wypisującej w memo i w pocięciu tego co zwraca ReadData i znalezieniu tam końca linii. Wielowątkowość nie jest w ogóle tu potrzebna.

    Kod: delphi
    Zaloguj się, aby zobaczyć kod

    0
  • #4 11 Cze 2017 14:47
    lukas_gab
    Poziom 15  

    Coś mi się wydaje kolego, że chyba czekasz na gotowca ;) Na takim podstawowym poziomie Pascal dużo się nie różni od C. Musisz użyć tych funkcji co linkuje, tutaj świetnie opisanych z przykładami, żeby zaimplementować algorytm, który wyżej opisałem, czyli wszystko co potrzeba do zrobienia tego. Jak napotkasz błędy podczas implementacji to ją tutaj przeklej, a z pewnością spróbuję pomóc, naprawić kod.

    https://www.freepascal.org/docs-html/rtl/system/pos.html
    https://www.freepascal.org/docs-html/rtl/system/copy.html
    https://www.freepascal.org/docs-html/rtl/system/delete.html
    https://www.freepascal.org/docs-html/rtl/system/insert.html

    0
  • #6 11 Cze 2017 15:36
    lukas_gab
    Poziom 15  

    Dziwnie mylisz słowo "pomoc" z "wyręczyć". Ja już Tobie pomogłem, ale widocznie właśnie oczekujesz bardziej wyręczenia. Nie miej mi za złe, ale nie lubię wyciągania kodu, nie pokazując swojego wkładu - owszem, sam program napisałeś, ale nawet nie podejmujesz prób implementacji algorytmu jaki zaproponowałem, z użycia linków jakie podesłałem. W oddaniu gotowca nie ma żadnych walorów edukacyjnych. Niemniej szczerze życzę powodzenia.

    0
  • #7 11 Cze 2017 21:15
    adamas_nt
    Moderator Programowanie

    Całkowicie popieram stanowisko kolegi lukas_gab i tylko ze względu na wartość Jego postów temat pozostawiam na forum.
    Przy takiej postawie kolegi el_beton, nie widzę sensu dalszej dyskusji. Temat zamykam.

    0