Text wie initialisieren?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Text wie initialisieren?

Beitrag von Heinrich Wolf »

Hi,

ich hab folgenden Code:

Code: Alles auswählen

function ReadPipe(Cmd : String; var Output : String) : Boolean;
  var    Pipe : Text;
  begin
    ReadPipe := False;
    Output   := '';
    POpen(Pipe, Cmd, 'R');
    if fpgeterrno = 0 then
      begin
        ReadLn(Pipe, Output);
        if PClose(Pipe) = 0 then
          ReadPipe := True;
      end;
  end;
fpc sagt dazu:

Hint: Local variable "Pipe" does not seem to be initialized

Wie kriege ich diesen Hint / diese Warnung mit einer Verbesserung meines Codes weg? Ich möchte die Compiler Einstellungen auf Urzustand lassen.

Gruß
Heiner
Zuletzt geändert von monta am Di 24. Mai 2011, 14:35, insgesamt 1-mal geändert.
Grund: Highlighter

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Text wie initialisieren?

Beitrag von carli »

Code: Alles auswählen

{$HINTS OFF}
{$HINTS ON}
POpen hat "var" und nicht das korrektere "out" in der Signatur.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Text wie initialisieren?

Beitrag von Heinrich Wolf »

Danke!

Das ist genau so gut wie initialisieren.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Text wie initialisieren?

Beitrag von carli »

Heinrich Wolf hat geschrieben:Danke!

Das ist genau so gut wie initialisieren.
Wie ich bereits sagte, der Hinweis ist eine Fehlleitung. Da müsste korrekterweise ein "out"-Modifier in der Signatur stecken.

Benutzeravatar
corpsman
Lazarusforum e. V.
Beiträge: 1645
Registriert: Sa 28. Feb 2009, 08:54
OS, Lazarus, FPC: Linux Mint Mate, Lazarus GIT Head, FPC 3.0
CPU-Target: 64Bit
Wohnort: Stuttgart
Kontaktdaten:

Re: Text wie initialisieren?

Beitrag von corpsman »

Code: Alles auswählen

function ReadPipe(Cmd : String; var Output : String) : Boolean;
  var    Pipe : Text;
  begin
    ReadPipe := False;
    Output   := '';
    Pipe := '';  // So kommt auch keine Hint mehr
    POpen(Pipe, Cmd, 'R');
    if fpgeterrno = 0 then
      begin
        ReadLn(Pipe, Output);
        if PClose(Pipe) = 0 then
          ReadPipe := True;
      end;
  end;
--
Just try it

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Text wie initialisieren?

Beitrag von carli »

Du kommst von Delphi, richtig?
Die popen-Variante ist die alte prozedurale Methode, wenn du mit Streams arbeiten willst, steht dir die Klasse TProcess zur Verfügung.

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Text wie initialisieren?

Beitrag von Heinrich Wolf »

Richtig! Ich komme von Delphi. Aber C in Unix mache ich auch seit dem Jahr 1992.

TProcess hab ich mir noch nicht angeschaut.
Ich brauche ReadPipe nur für folgendes:
ReadPipe('gconftool-2 -g /system/http_proxy/host', Proxy);
ReadPipe('kreadconfig --file kioslaverc --group "Proxy Settings" --key httpProxy', s)
usw.

Gruß
Heiner

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Text wie initialisieren?

Beitrag von Heinrich Wolf »

corpsman hat geschrieben:

Code: Alles auswählen

function ReadPipe(Cmd : String; var Output : String) : Boolean;
  var    Pipe : Text;
...
    Pipe := '';  // So kommt auch keine Hint mehr
...
Eine Hint kommt nicht mehr, sondern ein Fehler und es lässt sich nicht übersetzen :P

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Text wie initialisieren?

Beitrag von Socke »

Heinrich Wolf hat geschrieben:
corpsman hat geschrieben:

Code: Alles auswählen

function ReadPipe(Cmd : String; var Output : String) : Boolean;
  var    Pipe : Text;
...
    Pipe := '';  // So kommt auch keine Hint mehr
...
Eine Hint kommt nicht mehr, sondern ein Fehler und es lässt sich nicht übersetzen :P
Pipe ist ja auch vom Typ Text (Text <> String); richtiger wäre wohl:

Code: Alles auswählen

FillChar(Pipe, SizeOf(Pipe), 0);
Damit kannst du den Record richtig initialisieren, aber auch hier gibts einen Hineweis, darauf, dass Pipe nicht initialisiert sei, da hier der Parameter als var übergeben wird (als out-Parameter geht das nicht). Den Hinweis wirst du nur los, wenn du irgendeinem Feld des Records einen Wert zuweist:

Code: Alles auswählen

TTextRec(Pipe).bufend := 0;
FillChar(Pipe, SizeOf(Pipe), 0); // oder eine andere Funktion, die den Record initialisiert
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Heinrich Wolf
Beiträge: 323
Registriert: Di 12. Apr 2011, 13:21
OS, Lazarus, FPC: WinXP + VMWare Player mit Fedora14, L 1.1, FPC 2.7.1
CPU-Target: 1core 1,8GHz 32Bit
Wohnort: Fürth
Kontaktdaten:

Re: Text wie initialisieren?

Beitrag von Heinrich Wolf »

TTextRec(Pipe).bufend := 0; finde ich noch besser als {$Hints off}

Antworten