ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Beitrag 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)
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: ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Beitrag 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
Benutzeravatar
al90
Beiträge: 1103
Registriert: 06.01.2005 23:15
Kontaktdaten:

Re: ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Beitrag von al90 »

Auch nicht übel. :allright: Wusste garnicht das es auch ne API dazu gibt.
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: ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Beitrag 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!
Axolotl
Beiträge: 290
Registriert: 31.12.2008 16:34

Re: ConvertEnvString - Strings mit Environment-Inhalt umwandeln

Beitrag 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%") 

Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Antworten