ParamStr und ""
-
- 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 ""
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....
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
Michael Springwald
-
- 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
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??
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??
-
- 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)
@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.
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
Michael Springwald
-
- 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)
@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 ?
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
Michael Springwald
-
- 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)
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....
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
Michael Springwald
-
- 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)
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...
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
Michael Springwald
-
- 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
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.
Dafür gibt es doch sicher eine Escape-Sequenz, oder? Weiß das zufällig jemand, ich konnte noch keine finden. Danke.
-
- 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)
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 ?
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
Michael Springwald
-
- 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
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:
Dein Programm reagiert vollkommen richtig und tut hoffentlich was es soll. Fertig.
Nichts mehr zu sagen.
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:
Und diese Aussage stimmt halt nicht, da die " immer weg gemacht werden, ausser man benutzt eben Escape-Sequenzen.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...
Tut es nicht, ich habe es sicherheitshalber probiert. Hätte mich auch gewundert.unter Delphi tat er das, da bin ich mir 100%ig Sicher.
Dein Programm reagiert vollkommen richtig und tut hoffentlich was es soll. Fertig.
Nichts mehr zu sagen.