RunProgram(File$)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

RunProgram(File$)

Beitrag von dl5ndh »

Hallo,
ich möchte eine Textdatei innerhalb des Programmes mit dem Standard-Editor
auf dem PC öffnen.

Ich benutze dazu RunProgram(DATEINAME).

Als Standardprogramm habe ich WordPad. Nach dem Aufruf wird auch
WordPad mit dem Inhalt von DATEINAME geöffnet, nur komischerweise
nicht nur einmal, sondern 2 Mal. Ich muß dann also 2 Mal WordPad wieder
schließen. Weiß jemand, was man machen muß, damit sich der Texteditor
nur einmal öffnet?

Gruß
Gerhard
c4s
Beiträge: 1235
Registriert: 19.09.2007 22:18

Re: RunProgram(File$)

Beitrag von c4s »

Poste mal den kompletten Code den du benutzt. Bestimmt hat sich da ein Fehler eingeschlichen.
"Menschenskinder, das Niveau dieses Forums singt schon wieder!" — GronkhLP ||| "ich hogffe ihr könnt den fehle endecken" — Marvin133 ||| "Ideoten gibts ..." — computerfreak ||| "Jup, danke. Gruss" — funkheld
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: RunProgram(File$)

Beitrag von ts-soft »

Ich weiß nicht, was an Deiner Config falsch ist, das es zweimal kommt, aber Du kannst es ja mal so
probieren:

Code: Alles auswählen

Define.s File = #DQUOTE$ + #PB_Compiler_Home + "SDK\Readme.txt" + #DQUOTE$
RunProgram("wordpad", File, GetPathPart(File))
Wobei man für unformatierte Text besser Notepad nutzt!
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Re: RunProgram(File$)

Beitrag von dl5ndh »

Hier die aufgerufene Prozedur:

Code: Alles auswählen

Procedure EXPORT_ADIF()
;GLOBALE VARIABLE TRZ$ (Trennzeichen)
Protected FILE.s, titel$, standarddatei$,pattern$,patternposition.b, ZEILE$, anzahl.l, AnzBytes.l, markiert.s
Protected a$, b$, c$, d$, e$, f$, g$, h$, i$, j$, k$, l$, m$, n$, o$, p$, c2$, qs$, qr$, begriff$, dxcc$
titel$="LOGBUCH  [EXPORT > ADIF ]"
standarddatei$=ReplaceString(ReplaceString(eigenes_call,Chr(216),"0",1,1),"/","~",1,1)+"_EXPORT_"+FormatDate("%dd%mm%yyyy%hh%ii",Date())+".adi"
pattern$="ADIF-Dateien | *.adi"
FILE = SaveFileRequester(titel$,standarddatei$,pattern$,patternposition)

If FILE ="":ProcedureReturn(i):EndIf
anzahl = CountGadgetItems(#LIGadget_3)
If anzahl = 0:MessageRequester("LOGBUCH  [ EXPORT > ADIF ]","ES SIND KEINE EINTRÄGE IN DER LISTE"):ProcedureReturn(i):EndIf
;Liste abarbeiten *******
;Speicherbereich erstellen
*beginn=AllocateMemory(20,5000000000,0) 
*zeiger=*beginn
AnzBytes=0

;HEADER EINTRAGEN
;1.ZEILE
ZEILE$="PureLOG Logbuchprogramm [2004-"+FormatDate("%yyyy",Date())+"]"+Chr(10)
AnzBytes=AnzBytes+Len(ZEILE$)
PokeS(*zeiger,ZEILE$,Len(ZEILE$))
*zeiger=*zeiger+Len(ZEILE$)
;2.ZEILE
ZEILE$="http://purelog.de"+Chr(10)
AnzBytes=AnzBytes+Len(ZEILE$)
PokeS(*zeiger,ZEILE$,Len(ZEILE$))
*zeiger=*zeiger+Len(ZEILE$)
;VERSION ADIF EINTRAGEN
ZEILE$="<ADIF_VER:4>1.00"+Chr(10)
AnzBytes=AnzBytes+Len(ZEILE$)
PokeS(*zeiger,ZEILE$,Len(ZEILE$))
*zeiger=*zeiger+Len(ZEILE$)
;EOH EINTRAGEN
ZEILE$="<EOH>"+Chr(10)
AnzBytes=AnzBytes+Len(ZEILE$)
PokeS(*zeiger,ZEILE$,Len(ZEILE$))
*zeiger=*zeiger+Len(ZEILE$)
;LEERZEILE
ZEILE$=""+Chr(10)
AnzBytes=AnzBytes+Len(ZEILE$)
PokeS(*zeiger,ZEILE$,Len(ZEILE$))
*zeiger=*zeiger+Len(ZEILE$)

markiert = "NEIN"
;Feststellen, ob was markiert ist,oder nicht
For i=0 To CountGadgetItems(#LIGadget_3)-1
    If GetGadgetItemState(#LIGadget_3,i) <> 0: markiert = "JA":Break:EndIf
Next i


;AB HIER DIE DATEN EINTRAGEN


Select markiert
        Case "JA"


      For i=0 To CountGadgetItems(#LIGadget_3)-1
      If GetGadgetItemState(#LIGadget_3,i) <> 0
      ;ZEILE 1
      a$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,1),Chr(216),"0",1,1);RUFZEICHEN
      b$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,2),Chr(216),"0",1,1);DXCC
      ;DXCC-NR feststellen
      Restore ADIF
      Repeat
          Read begriff$
          If StringField(begriff$,1,"#")=b$:dxcc$=StringField(begriff$,2,"#"):Break:EndIf
      Until begriff$="ADIFENDE" 
      
      
      c$=LTrim(GetGadgetItemText(#LIGadget_3,i,5));FREQUENZ
      ;BAND HERAUSFILTERN
      If ValF(c$)>=1.800 And Val(c$)<=1.980:c2$="160M":EndIf
      If ValF(c$)>=3.500 And Val(c$)<=3.800:c2$="80M":EndIf
      If ValF(c$)>=7.000 And Val(c$)<=7.200:c2$="40M":EndIf
      If ValF(c$)>=10.100 And ValF(c$)<=10.150:c2$="30M":EndIf
      If ValF(c$)>=14.000 And ValF(c$)<=14.350:c2$="20M":EndIf
      If ValF(c$)>=18.068 And ValF(c$)<=18.168:c2$="17M":EndIf
      If ValF(c$)>=21.000 And ValF(c$)<=21.450:c2$="15M":EndIf
      If ValF(c$)>=24.890 And ValF(c$)<=24.990:c2$="12M":EndIf
      If ValF(c$)>=28.000 And ValF(c$)<=29.700:c2$="10M":EndIf
      If ValF(c$)>=50.000 And ValF(c$)<=52.000:c2$="6M":EndIf
      If ValF(c$)>=144.000 And ValF(c$)<=146.000:c2$="2M":EndIf
      If ValF(c$)>=430.000 And ValF(c$)<=440.000:c2$="70CM":EndIf
      If ValF(c$)>=1240.000 And ValF(c$)<=1300.000:c2$="23CM":EndIf
      If ValF(c$)>=2320.000 And ValF(c$)<=2450.000:c2$="13CM":EndIf
      If ValF(c$)>=5650.000 And ValF(c$)<=5850.000:c2$="6CM":EndIf
      If ValF(c$)>=10000.000 And ValF(c$)<=10500.000:c2$="3CM":EndIf
      ;BAND
      d$=GetGadgetItemText(#LIGadget_3,i,6);MODE
      ZEILE$="<CALL:"+Str(Len(a$))+">"+a$+"  <DXCC:"+Str(Len(dxcc$))+":N>"+dxcc$+"  <ENTITY:"+Str(Len(b$))+":C>"+b$+"  <FREQ:"+Str(Len(c$))+">"+c$+"  <BAND:"+Str(Len(c2$))+">"+c2$+"  <MODE:"+Str(Len(d$))+">"+d$+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 2
      e$=GetGadgetItemText(#LIGadget_3,i,3);DATUM
      f$=GetGadgetItemText(#LIGadget_3,i,4);UTC
      ZEILE$="     <QSO_DATE:8>"+StringField(e$,3,".")+StringField(e$,2,".")+StringField(e$,1,".")+"  <TIME_ON:4>"+StringField(f$,1,":")+StringField(f$,2,":")+"  <TIME_OFF:4>"+StringField(f$,1,":")+StringField(f$,2,":")+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 3
      g$=GetGadgetItemText(#LIGadget_3,i,7);RSTAB
      h$=GetGadgetItemText(#LIGadget_3,i,8);RSTAN
      ZEILE$="     <RST_SENT:"+Str(Len(g$))+">"+g$+"  <RST_RCVD:"+Str(Len(h$))+">"+h$+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 4
      i$=GetGadgetItemText(#LIGadget_3,i,9);NAME
      j$=GetGadgetItemText(#LIGadget_3,i,10);QTH
      k$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,11),Chr(216),"0",1,1);DOK
      ZEILE$="     <NAME:"+Str(Len(i$))+">"+i$+"  <QTH:"+Str(Len(j$))+">"+j$+"  <DOK:"+Str(Len(k$))+":C>"+k$+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 5
      l$=Left(ReplaceString(GetGadgetItemText(#LIGadget_3,i,12),Chr(216),"0",1,1),2)+"-"+Right(ReplaceString(GetGadgetItemText(#LIGadget_3,i,12),Chr(216),"0",1,1),3);IOTA
      If Len(l$)<4:l$="":EndIf
      m$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,13),Chr(216),"0",1,1);LOCATOR
      ZEILE$="     <IOTA:"+Str(Len(l$))+">"+l$+"  <GRIDSQUARE:"+Str(Len(m$))+">"+m$+Chr(10)
;ZEILE 6
      n$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,14),Chr(216),"0",1,1);MANAGER
      o$=GetGadgetItemText(#LIGadget_3,i,15);QSL
      If o$="bestätigt":qs$="Y":qr$="Y"
            ElseIf o$="keine QSL":qs$="N":qr$="N"
            ElseIf o$="direkt":qs$="Y":qr$="R"
            ElseIf o$="Büro":qs$="Y":qr$="R"
      EndIf
      p$=GetGadgetItemText(#LIGadget_3,i,16);BEMERKUNGEN
      ZEILE$="<QSL_VIA:"+Str(Len(n$))+">"+n$+"  <QSL_SENT:1>"+qs$+"  <QSL_RCVD:1>"+qr$+"  <COMMENT:"+Str(Len(p$))+">"+p$+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 7
      ZEILE$="<EOR>"+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 8
      ZEILE$=""+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
      EndIf
      Next i

      Case "NEIN"
      
      For i=0 To CountGadgetItems(#LIGadget_3)-1
      ;ZEILE 1
      a$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,1),Chr(216),"0",1,1);RUFZEICHEN
      b$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,2),Chr(216),"0",1,1);DXCC
      ;DXCC-NR feststellen
      Restore ADIF
      Repeat
          Read begriff$
          If StringField(begriff$,1,"#")=b$:dxcc$=StringField(begriff$,2,"#"):Break:EndIf
      Until begriff$="ADIFENDE" 
      
      
      c$=LTrim(GetGadgetItemText(#LIGadget_3,i,5));FREQUENZ
      ;BAND HERAUSFILTERN
      If ValF(c$)>=1.800 And Val(c$)<=1.980:c2$="160M":EndIf
      If ValF(c$)>=3.500 And Val(c$)<=3.800:c2$="80M":EndIf
      If ValF(c$)>=7.000 And Val(c$)<=7.200:c2$="40M":EndIf
      If ValF(c$)>=10.100 And ValF(c$)<=10.150:c2$="30M":EndIf
      If ValF(c$)>=14.000 And ValF(c$)<=14.350:c2$="20M":EndIf
      If ValF(c$)>=18.068 And ValF(c$)<=18.168:c2$="17M":EndIf
      If ValF(c$)>=21.000 And ValF(c$)<=21.450:c2$="15M":EndIf
      If ValF(c$)>=24.890 And ValF(c$)<=24.990:c2$="12M":EndIf
      If ValF(c$)>=28.000 And ValF(c$)<=29.700:c2$="10M":EndIf
      If ValF(c$)>=50.000 And ValF(c$)<=52.000:c2$="6M":EndIf
      If ValF(c$)>=144.000 And ValF(c$)<=146.000:c2$="2M":EndIf
      If ValF(c$)>=430.000 And ValF(c$)<=440.000:c2$="70CM":EndIf
      If ValF(c$)>=1240.000 And ValF(c$)<=1300.000:c2$="23CM":EndIf
      If ValF(c$)>=2320.000 And ValF(c$)<=2450.000:c2$="13CM":EndIf
      If ValF(c$)>=5650.000 And ValF(c$)<=5850.000:c2$="6CM":EndIf
      If ValF(c$)>=10000.000 And ValF(c$)<=10500.000:c2$="3CM":EndIf
      ;BAND
      d$=GetGadgetItemText(#LIGadget_3,i,6);MODE
      ZEILE$="<CALL:"+Str(Len(a$))+">"+a$+"  <DXCC:"+Str(Len(dxcc$))+":N>"+dxcc$+"  <ENTITY:"+Str(Len(b$))+":C>"+b$+"  <FREQ:"+Str(Len(c$))+">"+c$+"  <BAND:"+Str(Len(c2$))+">"+c2$+"  <MODE:"+Str(Len(d$))+">"+d$+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 2
      e$=GetGadgetItemText(#LIGadget_3,i,3);DATUM
      f$=GetGadgetItemText(#LIGadget_3,i,4);UTC
      ZEILE$="     <QSO_DATE:8>"+StringField(e$,3,".")+StringField(e$,2,".")+StringField(e$,1,".")+"  <TIME_ON:4>"+StringField(f$,1,":")+StringField(f$,2,":")+"  <TIME_OFF:4>"+StringField(f$,1,":")+StringField(f$,2,":")+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 3
      g$=GetGadgetItemText(#LIGadget_3,i,7);RSTAB
      h$=GetGadgetItemText(#LIGadget_3,i,8);RSTAN
      ZEILE$="     <RST_SENT:"+Str(Len(g$))+">"+g$+"  <RST_RCVD:"+Str(Len(h$))+">"+h$+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 4
      i$=GetGadgetItemText(#LIGadget_3,i,9);NAME
      j$=GetGadgetItemText(#LIGadget_3,i,10);QTH
      k$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,11),Chr(216),"0",1,1);DOK
      ZEILE$="     <NAME:"+Str(Len(i$))+">"+i$+"  <QTH:"+Str(Len(j$))+">"+j$+"  <DOK:"+Str(Len(k$))+":C>"+k$+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 5
      l$=Left(ReplaceString(GetGadgetItemText(#LIGadget_3,i,12),Chr(216),"0",1,1),2)+"-"+Right(ReplaceString(GetGadgetItemText(#LIGadget_3,i,12),Chr(216),"0",1,1),3);IOTA
      If Len(l$)<4:l$="":EndIf
      m$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,13),Chr(216),"0",1,1);LOCATOR
      ZEILE$="     <IOTA:"+Str(Len(l$))+">"+l$+"  <GRIDSQUARE:"+Str(Len(m$))+">"+m$+Chr(10)
;ZEILE 6
      n$=ReplaceString(GetGadgetItemText(#LIGadget_3,i,14),Chr(216),"0",1,1);MANAGER
      o$=GetGadgetItemText(#LIGadget_3,i,15);QSL
      If o$="bestätigt":qs$="Y":qr$="Y"
            ElseIf o$="keine QSL":qs$="N":qr$="N"
            ElseIf o$="direkt":qs$="Y":qr$="R"
            ElseIf o$="Büro":qs$="Y":qr$="R"
      EndIf
      p$=GetGadgetItemText(#LIGadget_3,i,16);BEMERKUNGEN
      ZEILE$="<QSL_VIA:"+Str(Len(n$))+">"+n$+"  <QSL_SENT:1>"+qs$+"  <QSL_RCVD:1>"+qr$+"  <COMMENT:"+Str(Len(p$))+">"+p$+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 7
      ZEILE$="<EOR>"+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
;ZEILE 8
      ZEILE$=""+Chr(10)
      AnzBytes=AnzBytes+Len(ZEILE$)
      PokeS(*zeiger,ZEILE$,Len(ZEILE$)) 
      *zeiger=*zeiger+Len(ZEILE$)
      
      Next i
      
      
      
EndSelect




CreateFile(21,FILE)
    WriteData(*beginn,AnzBytes)
CloseFile(21)
FreeMemory(20)
nrx=MessageRequester("LOGBUCH  [ EXPORT > ADIF ]","EXPORT FERTIG [ "+FILE+" ] ÖFFNEN ?",#PB_MessageRequester_YesNo)

If nrx = 6
    If RunProgram(FILE) = 0
          MessageRequester("LOGBUCH  [ EXPORT > ADIF ]","Die soeben exportierte ADIF-Datei konnte nicht geöffnet werden"+Chr(10)+"( Bitte überprüfen, ob ein Standard-Text-Editor existiert )")
          ProcedureReturn(i)
    Else
              RunProgram(FILE)
    EndIf
EndIf
EndProcedure
Hallo Ts-Soft, Deine Antwort werde ich mal probieren,danke
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Re: RunProgram(File$)

Beitrag von dl5ndh »

Sorry, hatte vergessen zu schreiben, dass ich das noch mit 3.80 programmiert habe.
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: RunProgram(File$)

Beitrag von rolaf »

Code: Alles auswählen

    If RunProgram(FILE) = 0
          MessageRequester("LOGBUCH  [ EXPORT > ADIF ]","Die soeben exportierte ADIF-Datei konnte nicht geöffnet werden"+Chr(10)+"( Bitte überprüfen, ob ein Standard-Text-Editor existiert )")
          ProcedureReturn(i)
    Else
              RunProgram(FILE)
    EndIf
Zweimal RunProgram(FILE), kein Wunder also. :wink:
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: RunProgram(File$)

Beitrag von ts-soft »

DrFalo hat geschrieben:Zweimal RunProgram(FILE), kein Wunder also. :wink:
Ist die Sache mit der Logik :wink:

Wenn RunProgram() (erstes ausführen) nicht erfolgreich, dann
RunProgram() zweites ausführen
Benutzeravatar
rolaf
Beiträge: 3843
Registriert: 10.03.2005 14:01

Re: RunProgram(File$)

Beitrag von rolaf »

ts-soft hat geschrieben:
DrFalo hat geschrieben:Zweimal RunProgram(FILE), kein Wunder also. :wink:
Ist die Sache mit der Logik :wink:

Wenn RunProgram() (erstes ausführen) nicht erfolgreich, dann
RunProgram() zweites ausführen
Ergo: "Else RunProgram(File)" in den Orkus :mrgreen: dann fluppts...
:::: WIN 10 :: PB 5.73 :: (x64) ::::
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Re: RunProgram(File$)

Beitrag von dl5ndh »

Danke Euch beiden,
ich wollte den ersten Aufruf nur als Abfrage eintragen, also dabei wird
das auch schon ausgeführt, na so was dummes,hi.

Änder ich gleich
DANKE
Benutzeravatar
dl5ndh
Beiträge: 94
Registriert: 13.05.2008 19:55

Re: RunProgram(File$)

Beitrag von dl5ndh »

Ich hab's nun abgeändert.
Es geht nun wunderbar... nur einmal WordPad geöffnet! DANKE
Antworten