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.

Delphi comport - wysyłanie pliku textowego

goodbay 21 Kwi 2008 22:47 4162 8
  • #1 21 Kwi 2008 22:47
    goodbay
    Poziom 11  

    Witam
    Jestem średni w programowaniu w Delphi. Czy ktoś podpowie mi jak wysłać plik np. tekstowy za pomocą komponentu comport przez RS232 do innego kompa. Chcę uzyskać efekt taki jak w Hyperterminalu "Wyślij plik".
    Pozdrawiam

    0 8
  • #2 22 Kwi 2008 11:36
    krzychS
    Poziom 29  

    Witam

    Bardzo dużo informacji na ten temat znajdiesz na www.elektroda.pl wystarczy poszukać :)

    W razie problemów pomogę.
    Pozdrawiam.

    0
  • #3 22 Kwi 2008 21:00
    goodbay
    Poziom 11  

    Umiem wysyłać i odbierać znaki ale nie wiem jak wysłać cały plik?
    Pozdrawiam

    0
  • #4 22 Kwi 2008 21:33
    190175
    Użytkownik usunął konto  
  • #5 23 Kwi 2008 20:57
    goodbay
    Poziom 11  

    Witam.
    Trochę skomplikowane czy jest może krótsza droga a może jakiś przykład ?
    Pozdrawiam

    0
  • #6 23 Kwi 2008 21:24
    190175
    Użytkownik usunął konto  
  • #7 28 Kwi 2008 22:57
    goodbay
    Poziom 11  

    Witam.
    Wielkie dzięki OLOAM.
    Przykłady działają. Jak wysłać plik HEX w sposób aby każda linijka pliku HEX była w tej samej linii a nie jedna pod drugą 'wysyła pierwszą linię kodu następnie drugą ale bez znaków chr(13) itd. aż do końca pliku?
    Pozdrawiam

    0
  • #8 29 Kwi 2008 02:27
    190175
    Użytkownik usunął konto  
  • #9 29 Kwi 2008 08:36
    Dżyszla
    Poziom 42  

    Ale do przesyłu plików binarnych (zawierających znaki z zakresu ACII 0-255) świetnie nadaje się zaprezentowany pierwszy przykład. On także zachowa Ci miejsca występowania znaków #13...
    A jeśli Ci chodzi o "zlinijkowanie" takiego pliku, czyli wysyłanie buforem, gdzie separatorem jest znak #13 to mniej więcej będzie to tak: (przy okazji porawiłem kod na bardziej bezpieczny)

    Code:

    var
       strumien: TMemoryStream;
       znak: char;
       bufor: String;
    begin
       strumien:=TMemoryStream.Create;
       try
          strumien.LoadFromFile('plik.bin');
          bufor:='';
          comport1.Open;
          try
             while stumien.Position<strumien.size do begin
                strumien.ReadBuffer(znak,sizeof(znak));
                if znak=#13 then begin
                     comport1.Write(bufor,length(bufor)); ///!!albo ...Write(Pointer(bufor)^,length(bufor)) - nie pamiętam teraz, czy właśnie taki zapis nie jest dla stringa wymagany.
                     bufor:='';
                end else
                     bufor:=bufor+znak;
             end;
          finally
             comport1.Close; //chyba tak się zamyka? nie znam komponentu
          end;
       finally
           strumien.Free;
       end;
    end;

    Dzięki temu wyślesz plik binarny całymi "linijkami" na raz bez znaków #13.

    A jeśli by to miał być Windosowski koniec linii (#10#13) to jeszcze trzeba za elsem dorzucić warunek if znak<>#10 then

    0