Parameter auslesen/irgendwas anderes

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Parameter auslesen/irgendwas anderes

Beitrag von Alves »

Moin erstmal,

nach diesem schönen 2:0 (irgendwelche Schweden hier?), stell ich mal wieder ne Frage:

Falls man es in der Suche finden kann, bitte Links zu den entsprechenden Topics, habe in der Suche nämlich nichts gefunden.

Wie finde ich raus, welche Parameter meinem Programm beim Start übergeben werden?

So zB

Öffnen mit: Texteditor (meinen).

Wie mach, dass meine Prozedur "open()" dann mit den Parametern aufgerufen wird?

Danke schonmal.

MfG

Alves
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Schau dir mal den ProgramParameter()-Befehl an.
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Hab ich schon von roherter gekriegt, komme mit diesem Code aber nocht auf die Lösung:

Code: Alles auswählen

Procedure openp(param$)

  ReadFile(0,param$)
    ClearGadgetItemList(#Editor_0)
    If param$
      While Eof(0) = 0         
        offnentext$ = ReadString()
        AddGadgetItem(#Editor_0, -1, offnentext$ )
      Wend
      gesaved=1
    EndIf       

EndProcedure

[...]

Parameter$ = ProgramParameter()

Open_Window_0()

If parameter$<>""
  openp(parameter$)
EndIf  


Edit: Hab den Fehler schon bemerkt und korrigiert. (1x paramter$ und einaml parameter$)

Aber: Wenn ich daztu diesen Code verwende:

Code: Alles auswählen

RunProgram("C:\TextEditor.exe", "C:\InternetHighSore.txt", "")
dann zeigt er im RichEdit nur "C:\InternetHighSore.txt" an.

Außerdem, wenn ich das Programm mit (Windows) "Öffnen mit..." öffne, zeigt er nichts im RichEdit an. Er öffnet nur den TextEditor.
Zuletzt geändert von Alves am 24.06.2006 21:07, insgesamt 1-mal geändert.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

Code: Alles auswählen

n=CountProgramParameters()
If n=0
  Debug "nix"
  End
EndIf

For i=1 To n
  param$=ProgramParameter()
  Debug param$
  Debug GetPathPart(param$)
  Debug GetFilePart(param$)
  Debug GetExtensionPart(param$)
  Debug ""
Next
ausserdem ändern:
If param$ --> if IsFile(0)
Zuletzt geändert von #NULL am 24.06.2006 21:12, insgesamt 1-mal geändert.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Die CountPorgramParamters() gibts nicht unter 3.94.

Edit:Mir IsFile klappt es jetzt mit Parametern, die ich mit PureBasic übergebe, aber mit den Windows "Öffnen mit..." klappts immer noch nicht.

Edit2: Es klappt aber auch nicht mit allen Parametern. "C:\hallo.txt" mit
hallo
mehrzeilen
als Inhalt funzt, die "C:\Dokumente und Einstellungen\User\Desktop\alvismus-vor-loschung.txt" mit großem Inhalt funzt nicht.
Zuletzt geändert von Alves am 24.06.2006 21:24, insgesamt 1-mal geändert.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

dann debugge eben so

Code: Alles auswählen

param$=ProgramParameter()
While param$
  Debug param$
  Debug GetPathPart(param$)
  Debug GetFilePart(param$)
  Debug GetExtensionPart(param$)
  Debug ""
  param$=ProgramParameter()
Wend
die parameter können bei der gleichen datei variieren, je nach dem ob der programmaufruf von konsole, durch *.lnk (verknüpfung)), oder durch drag'n'drop zustande kam -> lieber fall-unterscheiden.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
Alves
Beiträge: 1208
Registriert: 19.04.2006 18:24
Kontaktdaten:

Beitrag von Alves »

Deine Codesnippets funzen ja,
meine:

Code: Alles auswählen

Procedure openp(param$) 
  ReadFile(0,param$)
    ClearGadgetItemList(#Editor_0)
    If IsFile(0)<>0
      While Eof(0) = 0         
        offnentext$ = ReadString()
        AddGadgetItem(#Editor_0, -1, offnentext$ )
      Wend
      gesaved=1
    ;EndIf       
    Else
      MessageRequester("Fehler", "TextEditor.exe muss geschlossen werden",0)
      End
    EndIf  
EndProcedure
aber bei manchen Dateien nicht.

Dann sagt mit das IsFile, dass die dateien nicht bereit sind, obschon sie eindeutig existieren.

Die gleichenm Dateien kann ich auch Öffnen, wenn ich im Programm den Menupunkt "Öffnen" drücke.
Benutzeravatar
mk-soft
Beiträge: 3855
Registriert: 24.11.2004 13:12
Wohnort: Germany

Beitrag von mk-soft »

Bei Parameterübergabe von Ordner oder Dateien müssen diese in Anführungszeichen übergeben werden, da sonst etventuelle Leerzeichen als Trennzeichen Interpretiert werden

Programm.exe "Meine Datei.pb"

Code: Alles auswählen

OpenConsole()
  param$=ProgramParameter()
  While param$
    PrintN(param$)
    param$=ProgramParameter()
  Wend
  Input()
CloseConsole()
ProgPar "Meine Datei.pb"
-> Meine Datei.pb

ProgPar Meine Datei.pb
-> Meine
-> Datei.pb


FF :wink:
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

@alves
check die dateien mal damit (exe von console aufrufen, über drag'n' drop oder auch *.lnk-datei), so hat bei mir alles geklappt

Code: Alles auswählen

OpenConsole()
param$=ProgramParameter()
While param$
  PrintN( param$ )
  PrintN( "path : "+GetPathPart(param$) )
  PrintN( "file : "+GetFilePart(param$) )
  PrintN( "extension : "+GetExtensionPart(param$) )
  
  fileNr=ReadFile(#PB_Any, param$ )
  If fileNr
  	PrintN( "readfile : yes" )
  	CloseFile(fileNr)
  Else
  	PrintN( "readfile : no" )
  EndIf
  PrintN( "" )

  param$=ProgramParameter()
Wend
Input()
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

und insofern die dateien text enthalten klappt bei mir auch das hier:

Code: Alles auswählen

#Editor_0=0
Declare openp(param$)

OpenWindow(0,10,10,400,280,0,"lala")
CreateGadgetList( WindowID(0))
	EditorGadget(#Editor_0 ,0,0,400,280)

param$=ProgramParameter()
If param$
	openp(param$)
EndIf

Repeat
	Delay(10)
	event=WindowEvent()
Until 0


Procedure openp(param$)
  ReadFile(0,param$)
    ClearGadgetItemList(#Editor_0)
    If IsFile(0)
      While Eof(0) = 0         
        offnentext$ = ReadString()
        AddGadgetItem(#Editor_0, -1, offnentext$ )
      Wend
      gesaved=1
    ;EndIf       
    Else
      MessageRequester("Fehler", "TextEditor.exe muss geschlossen werden",0)
      End
    EndIf 
EndProcedure	
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten