ParamStr und ""

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

ParamStr und ""

Beitrag von pluto »

Hallo,
hatte heute mal wieder das verlangen eine Konsolen Anwendung zu schreiben.

Dabei ist mir aufgefallen das folgender String "Falsch" Verarbeitet wird von der Funktion ParmStr

--showList --caption="hallo du da wie geht es dir"

leider erkennt er in diesen String die " nicht... unter Delphi tat er das, da bin ich mir 100%ig Sicher... wie den euch sei, kennt ihr eine Möglichkeit wie ich das "umschiefen" kann ?

Gibt es eine Möglichkeit die Paramter die an das Programm übergeben werden auch ohne ParmStr auszulesen sondern direkt ?

Das man sie halt bearbeiten muss....
MFG
Michael Springwald

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

Hallo Pluto

Ich kann mich ja irren, aber ich glaube das Zeichen " ist in der Kommandozeile nicht zulässig und wird deshalb als Parameter ignoriert. Auch unter Delphi. Aber vieleicht geht ja eine Parameterdatei die dein Programm ausliest.

Tschüsss

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Ja müssen die " denn dabei sein? Für normal nimmt man die in der Shell ja, um lange Pfade und Dateinamen, welche durch Leerzeichen getrennt sind, als einen Parameter zu übergeben.
Windoof: meinprogram.exe "meine eigene Datei.txt" <> meinprogram.exe meine eigene Datei.txt

Erster Aufruf: 1 Parameter
Zweiter Aufruf: 3 Parameter

Aber man kann die Sonderzeichen sicherlich irgendwie mit einer Escape-Squenz übergeben, oder??

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@bembulak genau das geht halt mit ParamStr nicht... das ist das Problem
Ich möchte ja von der Shell aus solch ein String übergeben.
Gebe ich den String jetzt bei Lazarus als Start Parameter mit, dann geht es.... also es gibt eine Lösung, nur welche ?

@ulhau
da irrst du dich, da bin ich mir sicher gerade bei Windows wird das oft gemacht mit "" weil ja Verzeichnis Angaben Leerzeichen enthalten könnten.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

TCustomApplication kann die Parameter eigenständig parsen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

ulhau
Beiträge: 65
Registriert: Sa 27. Okt 2007, 13:27
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Seebergen

Beitrag von ulhau »

@pluto Tschuldigung Konsole mit Command verwechselt.

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

@Christian
müsste ich dann eine eigene Klasse erstellen die von TCustomApplication
abgeleitet ist ? mein ziel ist es halt paramStr zu übergehen.
weil mir die "" schon wichtig sind.... ich finde das es ein BUG in ParamSTR ist

könntet ihn jemand melden ?
(Danke !)

@ulhau
Kann ja passieren..... mit Command meinst du die Commandozeile von Windows ? Die kann aber auch mit "" umgehen das ist eigentlich seit es lange Verzeichnis Namen mit Leerzeichen gibt so üblich, oder ?
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Beitrag von Christian »

Datei->Neu->Console Application

bekommst du eine fertig abgeleitete Klasse mit allen includes und den ersten Handlern fertig.

Und nein das ist kein Bug in ParamSTR kannst finden was du willst ist aber nicht Ostern :)
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

Ja ich weiß wie ich eine Consolen Anwendung Erstellen, trozdem Danke.

Wenn das kein BUG ist finde ich das seltsam in Delphi geht sowas von Haus aus....

testanwendung "c:\test test\hallo\testdatei"
das würde in Lazarus nicht klappen....

Gut mal anders gefragt, gibt es noch einen anderen Befehl wie ParamStr nur halt in Roheform....
(ich hoffe das ist jetzt richtig gefragt*G*)

edit: ParamStr greift auf Argv das ist ein PChar habe ich gesehen. evlt. liegen da die Paramter in Rohe Format.... muss ich mal testen....
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

writeln('TEST:',string(argv[2]));
wenn ich das schreibe und der Paramter enhält "" dann macht er das richtig... aber bei ParamStr wo ich es erwartet hätte nicht...

edit: seltsam jetzt geht das sogar auch.... mit Paramstr das klappte gestern in der lpr Datei nicht. evlt.lag es auch an der Forschleife.... ich habe es heute Direkt getestet...
MFG
Michael Springwald

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Ich habe da jetzt unter WinXP auch ein wenig rumgespielt. Er ignoriert mir auch die "", aber eigentlich ist es egal, denn er soll sie ja auch ignorieren. Immerhin sind sie dazu da, Leerzeichen getrennte Dinge als einen Parameter zu behandeln. Das ist ok so. Ich frage mich nur, was man übergeben müsste, um die "" drin zu haben.
Dafür gibt es doch sicher eine Escape-Sequenz, oder? Weiß das zufällig jemand, ich konnte noch keine finden. Danke.

pluto
Lazarusforum e. V.
Beiträge: 7180
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Beitrag von pluto »

was genau meinst du jetzt ?
ich habe folgenden string den ich meiner Anwendung übergebe
"c:\test hhh\wie geht es dir\file" --showlist -lll a:test
Nach meinen heutigen versuchen gibt mir Paramstr(1)
c:\test hhh\wie geht es dir\file
zurück ohne die ""
und das dürfte in den meisten Fehlen doch schon ausreichen oder nicht ?
MFG
Michael Springwald

bembulak
Beiträge: 370
Registriert: Di 6. Feb 2007, 09:29
OS, Lazarus, FPC: L0.9.29 SVN:24607 FPC 2.4.0-32 bit @ Win XP SP3
CPU-Target: 32bit i386, ARM
Wohnort: Oberösterreich

Beitrag von bembulak »

Dass die "" fehlen, ist auch vollkommen richtig. Genauso sollte das System auch reagieren.
Ich meinte nur, es "könnte eventuell ein Fall entstehen, bei dem man die Quotationmarks im String haben will" und dafür gibt es dann sogeannte Escape-Sequenzen. Aber lassen wir das. Ich hatte nur gedacht, du hast da gröbere Probleme und brauchst die " weil du ja geschrieben hast:
Dabei ist mir aufgefallen das folgender String "Falsch" Verarbeitet wird von der Funktion ParmStr

--showList --caption="hallo du da wie geht es dir"

leider erkennt er in diesen String die " nicht...
Und diese Aussage stimmt halt nicht, da die " immer weg gemacht werden, ausser man benutzt eben Escape-Sequenzen.

unter Delphi tat er das, da bin ich mir 100%ig Sicher.
Tut es nicht, ich habe es sicherheitshalber probiert. Hätte mich auch gewundert.

Dein Programm reagiert vollkommen richtig und tut hoffentlich was es soll. Fertig.
Nichts mehr zu sagen.

Antworten