Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   [LIN][FPC][TERM] Zeichenbegrenzung (https://www.delphipraxis.net/107955-%5Blin%5D%5Bfpc%5D%5Bterm%5D-zeichenbegrenzung.html)

Nils_13 5. Feb 2008 09:51


[LIN][FPC][TERM] Zeichenbegrenzung
 
Hi,

ich übertrag gerade eine Konsolenanwendung von mir nach Linux. Dazu benötige ich den Free Pascal-Compiler, deshalb habe ich die Frage auch in dieser Kategorie gepostet. Da es eine Konsolenanwendung ist, ist es denke ich klar, dass ich auch bei dem terminal-fanatischen Linux eine Konsolenanwendung haben will. Nun schau ich gerade meine Rückgabe des Programmes durch und stelle fest, dass da was fehlt. Es ist vom Code her nicht ersichtlich, warum da was fehlt. Deshalb gehe ich davon aus, dass hier der String zu lang ist und abgeschnitten werden muss. Habt ihr eine Idee, was ich nun tun könnte ? Im schlimmsten Fall nehm ich die Direktausgabe raus und mach die Alternative zum Standard: In Datei schreiben. Das finde ich aber schlecht, denn ich will schließlich die Rückgabe des Programms einfach abkopieren und nicht erst noch eine Datei öffnen.

mashutu 5. Feb 2008 10:26

Re: [LIN][FPC][TERM] Zeichenbegrenzung
 
Kannst Du dazu ein wenig mehr posten?

Nils_13 5. Feb 2008 10:32

Re: [LIN][FPC][TERM] Zeichenbegrenzung
 
Delphi-Quellcode:
const Arr : Array[0..1] of Array[0..38] of String = (
  ('.-', '-...', '-.-.', '-..', '.', '..-.', '--.', '....', '..', '.---', '-.-', '.-..', '--', '-.', '---', '.--.', '--.-', '.-.', '...', '-', '..-', '...-', '.--', '-..-', '-.--', '--..', '-----', '.----', '..---', '...--', '....-', '.....', '-....', '--...', '---..', '----.', '.-.-.-', '--..--', '..--..'),

  ('A' , 'B'  , 'C'  , 'D' , 'E', 'F'  , 'G' , 'H'  , 'I' , 'J'  , 'K' , 'L'  , 'M' , 'N' , 'O' , 'P'  , 'Q'  , 'R' , 'S' , 'T', 'U' , 'V'  , 'W' , 'X'  , 'Y'  , 'Z'  , '0'   , '1'   , '2'   , '3'   , '4'   , '5'   , '6'   , '7'   , '8'   , '9'   , '.'    , ','    , '?'));

...
 
  // l = Zu Enkodierender String
  for i := 1 to Length(l) do
  begin
    if l[i] = ' ' then
      s := s + '/ '
    else
      for j := 0 to High(Arr[1]) do
        if Arr[1][j] = Trim(UpperCase(l[i])) then
          s := s + Arr[0][j] + ' ';
  end;
Das soll eigentlich aus
Zitat:

LADE DIR NUN DIESE DATEI RUNTER UND SAG MIR DEN NAMEN DES LIEDES GRAUEZELLEVAMAGCRONONORGSONGWAV
das machen:
Zitat:

.-.. .- -.. . / -.. .. .-. / -. ..- -. / -.. .. . ... . / -.. .- - . .. / .-. ..- -. - . .-. / ..- -. -.. / ... .- --. / -- .. .-. / -.. . -. / -. .- -- . -. / -.. . ... / .-.. .. . -.. . ... / --. .-. .- ..- . --.. . .-.. .-.. . ...- .- -- .- --. -.-. .-. --- -. --- -. --- .-. --. ... --- -. --. .-- .- ...-
Das Ergebnis:
Zitat:

.-.. .- -.. . / -.. .. .-. / -. ..- -. / -.. .. . ... . / -.. .- - . .. / .-. ..- -. - . .-. / ..- -. -.. / ... .- --. / -- .. .-. / -.. . -. / -. .- -- . -. / -.. . ... / .-.. .. . -.. . ... / --. .-. .- ..- . --.. . .-.. .-.. . ...- .- -- .- --. -.-. .-

DGL-luke 5. Feb 2008 10:37

Re: [LIN][FPC][TERM] Zeichenbegrenzung
 
evtl. schleicht sich irgendwo ein #0 dazwischen?

mashutu 5. Feb 2008 10:59

Re: [LIN][FPC][TERM] Zeichenbegrenzung
 
Einfaches Nachzaehlen hilft - oder?


...



Ich schatze es ist kein Zufall, dass das Ergebnis nach 256 Zeichen abgeschnitten wird.

Nils_13 5. Feb 2008 11:18

Re: [LIN][FPC][TERM] Zeichenbegrenzung
 
Hm, habe den Code angepasst, hat aber nichts geändert:
Delphi-Quellcode:
for i := 1 to Length(l) do
begin
  if l[i] = ' ' then
    s := s + '/ '
  else
    for j := 0 to High(Arr[1]) do
      if Length(s) = 256 then
      begin
        WriteLn(s);
        s := '';
      end else
        if Arr[1][j] = Trim(UpperCase(l[i])) then
          s := s + Arr[0][j] + ' ';
end;
EDIT:

= 255 muss es sein. Das ist an sich aber unschön eine neue Zeile zu erstellen. Ist es nicht möglich das aneinander zu ketten ?

Und was zur Hölle macht die DP mit meinem Code...immer wird er auseinandergenommen und ich muss ihn erst nochmal umschreiben....

mashutu 5. Feb 2008 11:29

Re: [LIN][FPC][TERM] Zeichenbegrenzung
 
Ich hatte eigentlich eher den Datentyp gemeint, der nur 256 Zeichen aufnimmt.
Da die deklaration in deinem Code nicht enthalten ist, kann ich aber nur raten.

Nils_13 5. Feb 2008 11:32

Re: [LIN][FPC][TERM] Zeichenbegrenzung
 
l ist ein String, der kann mehr als 256. Problematisch ist die Ausgabe: Die Konsole gibt vor dass ab 256 Zeichen schluss ist. Deshalb muss ich das abschneiden, das geht aber nicht so gut.

Ich kenne nun meinen Fehler. Delphi hat automatisch scheinbar längere Strings aktiviert, bei FPC muss man das erst noch einschalten ODER (so hab ich es gemacht) {$MODE DELPHI} ganz oben hinschreiben.

Danke an alle für die Hilfe!

mashutu 5. Feb 2008 12:15

Re: [LIN][FPC][TERM] Zeichenbegrenzung
 
Genau das hatte ich in meinem Posting weiter oben gemeint. Du musst latuernich die Strings so definieren, dass sie mehr als 255 Zeichen aufnehmen koennen:
{$H+}


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz