Programmparameter mit "," als Trenner

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Programmparameter mit "," als Trenner

Beitrag von Bisonte »

frankmannb hat geschrieben: wenn ich folgendes Programm kompiliere und als EXE abspeichere und dann das PRogramm auf der Kommandozeile starte mit z.B. test.exe test.pdf test2.pdf
bekomme ich nur test.pdf als auch test2.pdf als parameter angezeigt.
Starte ich hingegen das Programm mit
z.B. test.exe test.pdf,test2.pdf
bekomme ich nur einen Parameter nämlich test.pdf,test2.pdf angezeigt. Wieso?
also folgendes prgramm gibt Parameter1,2,3 und 4 aus....

Code: Alles auswählen

OpenConsole()
For i=1 To 4 ;##### Maximal 4 Parameter
  a.s = ProgramParameter()
  PrintN("Parameter "+Str(i)+" : "+a)
Next i
Input()
funktioniert tadellos.... nur durch Leerzeichen getrennt.
CMD.exe hat geschrieben:para.exe test.pdf test2.pdf test3.pdf

Ausgabe :

Parameter 1 : test.pdf
Parameter 2 : test2.pdf
Parameter 3 : test3.pdf
Parameter 4 :
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: Programmparameter mit "," als Trenner

Beitrag von DarkDragon »

Bisonte hat geschrieben:funktioniert tadellos.... nur durch Leerzeichen getrennt.
:lol: Da ist der Haken: Er will keine Leerzeichen, er will Kommas.

Sowas also:

Code: Alles auswählen

Define AllParameters.s
Define k.i

; Füge alle Parameter zusammen
AllParameters = ""
If CountProgramParameters() > 0
  For k = 0 To CountProgramParameters() - 2
    AllParameters + ProgramParameter(k) + " "
  Next k
  AllParameters + ProgramParameter(k)
EndIf

; Fülle ein Array
Dim Parameter.s(CountString(AllParameters, ","))
For k = 0 To ArraySize(Parameter())
  Parameter(k) = StringField(AllParameters, k + 1, ",")
Next k

; Teste das Array
For k = 0 To ArraySize(Parameter())
  Debug Parameter(k)
Next k
Wobei das ja natürlich nicht die saubere Art ist, denn das ist nichtmehr Betriebssystemkompatibel, d.h. man kann keine Files mehr über Drag'n'Drop auf die Exe schieben o.ä..
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: Programmparameter mit "," als Trenner

Beitrag von Bisonte »

DarkDragon hat geschrieben:
Bisonte hat geschrieben:funktioniert tadellos.... nur durch Leerzeichen getrennt.
:lol: Da ist der Haken: Er will keine Leerzeichen, er will Kommas.
Es las sich aber irgendwie, dass er die Leerzeichen "notgedrungen" haben wollte, weil ihm nicht bekannt war,
dass es so auch geht...

Naja ... Rein spekulatius ... äh spekulativ. :mrgreen:
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
GPI
Beiträge: 1511
Registriert: 29.08.2004 13:18
Kontaktdaten:

Re: Programmparameter mit "," als Trenner

Beitrag von GPI »

Äh, warum gibt man in der CLI/DOS-Box nicht folgendes ein:

Code: Alles auswählen

MyPrg "C:\Meine Daten\datei1.pdf" "d:\unsinniger Pfad\Dateimüll.txt" "e:\Ganz Viele Leerzeichen.haha"
als Programmparameter werden den Programm dann 3 Werte übergeben - mit den Spaces.

Von den Trennen mit "," würde ich dringend abraten. Zum einen ist das "," durchaus ein Zeiche, das in einer Datei vorkommen kann. Zum zweiten ist das einfach nicht konform mit allen anderen Dos-Programmen.
CodeArchiv Rebirth: Deutsches Forum Github Hilfe ist immer gern gesehen!
frankmannb
Beiträge: 47
Registriert: 21.02.2010 13:02

Re: Programmparameter mit "," als Trenner

Beitrag von frankmannb »

Hallo Leute,

vielen Dank für die vielen Vorschläge. Ich denke ich werde zunächst folgenden nutzen.

Parameter.s = ProgramParameter()
For i = 1 To CountString(parameter.s,",")+ 1
MessageRequester("TEST",StringField(parameter,i,","),#PB_MessageRequester_Ok)
Next

Warum durch "," getrennt? Hintergrund ist das ich ein Programm nachbauen muss welches bereits Produktiv im Einsatz ist, es aber von der Geschwindigkeit verbessert werden soll. Dies ist der Anfang dazu.

Vielen Dank nochmals für eure Hilfe.

grüße frankmannb
Antworten