Seite 1 von 2

Parameter auslesen/irgendwas anderes

Verfasst: 24.06.2006 20:14
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

Verfasst: 24.06.2006 20:45
von vonTurnundTaxis
Schau dir mal den ProgramParameter()-Befehl an.

Verfasst: 24.06.2006 20:53
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.

Verfasst: 24.06.2006 21:03
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)

Verfasst: 24.06.2006 21:10
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.

Verfasst: 24.06.2006 21:21
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.

Verfasst: 24.06.2006 21:27
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.

Verfasst: 25.06.2006 03:40
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:

Verfasst: 25.06.2006 12:50
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()

Verfasst: 25.06.2006 13:00
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