Seite 1 von 1

ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Verfasst: 31.12.2009 17:57
von al90
Hier ein kleines Beispiel zum umwandeln ganzer Strings mit Environment-Inhalt.
Ich hoffe der eine oder andere kanns gebrauchen. :wink:

Code: Alles auswählen

Procedure.s ConvertEnvString(string$)

Protected count.i, len.i, a$, b$

Repeat
  count = FindString(string$, "%", 1)
  If count > 0
    len = FindString(string$, "%", count+1) - count-1
    If len > 0
      a$ = Mid(string$, count+1, len)
      If a$ <> ""
        b$ = GetEnvironmentVariable(a$)
      EndIf
      string$ = ReplaceString(string$, "%"+a$+"%", b$, 1)
      b$=""
    Else
      Break
    EndIf
  EndIf
Until count = 0

ProcedureReturn Trim(string$)

EndProcedure

strg$="Identifier: %PROCESSOR_IDENTIFIER%" + #CRLF$ + "Type: %PROCESSOR_ARCHITECTURE%" + #CRLF$ + "Number of Cores: %NUMBER_OF_PROCESSORS%" + #CRLF$ + "Revision: %PROCESSOR_REVISION%"
MessageRequester("CPU Info", ConvertEnvString(strg$), #MB_OK|#MB_ICONINFORMATION)

Re: ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Verfasst: 31.12.2009 18:12
von ts-soft
:allright:

hier noch eine reine Windows Version, ist etwas kürzer und schneller, aber
nur unter Windows zu gebrauchen, ausserdem wird die tatsächlich gebrauchte
Stringlänge nicht geprüft, ist also ggflls anzupassen.

Code: Alles auswählen

Procedure.s ConvertEnvString(string.s)
  Protected lpDst.s{#MAX_PATH}
  If ExpandEnvironmentStrings_(@string, @lpDst, #MAX_PATH)
    ProcedureReturn lpDst
  EndIf
EndProcedure



strg$="Identifier: %PROCESSOR_IDENTIFIER%" + #CRLF$ + "Type: %PROCESSOR_ARCHITECTURE%" + #CRLF$ + "Number of Cores: %NUMBER_OF_PROCESSORS%" + #CRLF$ + "Revision: %PROCESSOR_REVISION%"
MessageRequester("CPU Info", ConvertEnvString(strg$), #MB_OK|#MB_ICONINFORMATION)
Gruß
Thomas

Re: ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Verfasst: 31.12.2009 18:31
von al90
Auch nicht übel. :allright: Wusste garnicht das es auch ne API dazu gibt.

Re: ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Verfasst: 31.12.2009 18:41
von ts-soft
al90 hat geschrieben:Auch nicht übel. :allright: Wusste garnicht das es auch ne API dazu gibt.
Muß man ja auch nicht :wink: , von der "zu Fuß" Variante kann man wesentlich mehr lernen!

Re: ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Verfasst: 31.12.2009 20:13
von Axolotl
Cool, hatte mir gerade selber so eine Routine gebaut.... :doh:

Code: Alles auswählen

Procedure.s ExpandEnvironmentVar(Text.s) 
  Protected p1.l, p2.l
  Protected env.s, pat.s
  
  Repeat
    p1 = FindString(Text, "%", p1+1)
    If p1
      p2 = FindString(Text, "%", p1+1) 
      If p2 
        pat = Mid(Text, p1+1, p2-p1-1) 
        If pat
          env = GetEnvironmentVariable(pat)
          If env
            Text = ReplaceString(Text, "%"+pat+"%", env, #PB_String_NoCase)
          EndIf 
        EndIf 
      EndIf
    EndIf
  Until p1 = 0 Or p2 = 0
  ProcedureReturn Text
EndProcedure

; testpattern...
Debug "Temp = " + ExpandEnvironmentVar("%TeMP%\  %temp% ") 
Debug "Something% = " + ExpandEnvironmentVar("Something%") 
Debug "'' = " + ExpandEnvironmentVar("") 
Debug "StupidText = " + ExpandEnvironmentVar("%StupidText%") 
Debug "appdata , programfiles = " + ExpandEnvironmentVar("%appData%, %programFiles%")