Hot News:

Unser Angebot:

  Foren auf CAD.de
  VBasic / vb.net / vbs / wsh
  VBA Funktion zum INI-Dateien auslesen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Online-Kurs: Grundlagen des 3D-Druck-Designs für Industrieingenieure , ein Kurs
Autor Thema:  VBA Funktion zum INI-Dateien auslesen (3470 mal gelesen)
marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2494
Registriert: 02.11.2001

Windows 10 64bit
AutoCAD Architecture 2018/2019 (deu/eng)
AEC-Collection 2019 (Revit und Zeugs)
Wenn sich's nicht vermeiden läßt:
D-A-CH Erweiterung (mies implementierter Schrott)

erstellt am: 07. Jan. 2002 10:17    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Forum,
ich suche 'ne VBA-Funktion zum auslesen, bzw. schreiben von Werten,
die in "INI-Dateien" zu finden sind (ähnlich der Funktionen in DOSLib).
Das Ini-File sieht in etwa so aus:

; Alle Pfadinformationen für ZVO-System
; wird von Dos_Lib Funktion (dos_getini section entry filename) gelesen.
[zvo-path]
temp=C:\Temp\
bestand=\\ntpos\tnpv\_daten\bestand\
pathfind=\\ntpos\tnpv\
; pathfind=e:\

[schalter]
defosmode=20517
defautosnap=39
deflwdisplay=1

[plot]
; *** 500er Plot ***
; Vorlage für 500er Plot
500erPlot=plot500.dwt
500erPC3=C:\R15\Plotters\Bestandsplan500.pc3
PlotGrau=C:\R15\Plot Styles\ZVO-Grau.ctb
PlotBlack=C:\R15\Plot Styles\ZVO-Schwarz.ctb
PlotColor=C:\R15\Plot Styles\ZVO-Color.ctb
ColorPlotter=C:\R15\Plotters\A0-Plotter-Color.pc3
Plottername=HP DesignJet 800 42 by HP

Die Funktion müßte also schon Kommentare (mit ";" beginnend) und Leerzeilen filtern können.
Mit Doslib kann man einen Eintrag so lesen:
(dos_getini section entry filename)
In o.g. Beispiel wäre das:
(dos_getini "schalter" "defautosnap" "c:\\zvo.ini")

Geschrieben wird der Eintrag so:
(dos_setini section entry value filename)
also:
(dos_setini "schalter" "defautosnap" "52" "c:\\zvo.ini")

Genau sowas suche ich für VBA.
Hat jemand sowas? Oder weiß wo's sowas gibt?

Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Manfred Kern
Mitglied
Softwareentwicklung CAD/CAM-Systembetreuung


Sehen Sie sich das Profil von Manfred Kern an!   Senden Sie eine Private Message an Manfred Kern  Schreiben Sie einen Gästebucheintrag für Manfred Kern

Beiträge: 86
Registriert: 25.05.2000

erstellt am: 07. Jan. 2002 10:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für marc.scherer 10 Unities + Antwort hilfreich


pro.vb.mod.ini.zip

 
Hier gibt es eine fertige Routine
als Anhang

Gruß

M.Kern

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Ehrenmitglied V.I.P. h.c.
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 07. Jan. 2002 10:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für marc.scherer 10 Unities + Antwort hilfreich

Hallo Marc,

bevor du dir so etwas selbst machst benutze am einfachsten die passenden Windows API Funktionen zum lesen und schreiben von INI Dateien.


  • GetPrivateProfileInt
  • GetPrivateProfileString
  • WritePrivateProfileString

Eine recht gute deutsche Beschreibung mit Beispiel in VB kannst du z.B. unter http://www.visualbasic-archiv.de/vbapi/GetPrivateProfileInt.php3 finden.

Ich hoffe damit kommst du zurecht.

Ciao,
Stefan

------------------
Inoffizielle Solidworks Hilfeseite
http://solidworks.cad.de
EMail: Stefan.Berlitz@solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

marc.scherer
Ehrenmitglied V.I.P. h.c.
CAD-Administrator



Sehen Sie sich das Profil von marc.scherer an!   Senden Sie eine Private Message an marc.scherer  Schreiben Sie einen Gästebucheintrag für marc.scherer

Beiträge: 2494
Registriert: 02.11.2001

erstellt am: 07. Jan. 2002 12:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hi Manfred und Stefan,
vielen Dank für Eure Hilfe.
Jetzt hab' ich kapiert, wie man die Funktionen denn nun verwenden muß...
Vorher habe ich beim Schreiben eines Wertes immer 'ne Fehlermeldung kassiert...
Anbei der modifizierte Code, wie er bei mir läuft... (mit Kommentar...)

Option Explicit

'Standardname der Ini - datei:
' Ist bei Funktionsaufrufen dann Optional
Private Const cmIniStandardname = "c:\acadwin\support\zvo.ini"

'Max Länge der Werte
Private Const cmMaxStringLength = 50

'Wert, der Zurückgegeben wird, falls der Wert nicht gefunden wird
Public Const cmIniFaultValue = "!!!IniError!!!"
'Public, damit man den Fehler in anderen Prozeduren abfragen kann

'-------------------------------------------------

Private Declare Function GetPrivateProfileString Lib _
    "kernel32" Alias "GetPrivateProfileStringA" (ByVal _
    lpApplicationName As String, ByVal lpKeyName As Any, _
    ByVal lpDefault As String, ByVal lpReturnedString As _
    String, ByVal nSize As Long, ByVal lpFileName As String) _
    As Long

Private Declare Function WritePrivateProfileString Lib _
    "kernel32" Alias "WritePrivateProfileStringA" (ByVal _
    lpApplicationName As String, ByVal lpKeyName As Any, _
    ByVal lpString As Any, ByVal lpFileName As String) _
    As Long


' Wofür mag das sein? Na egal lassen wir's mal lieber drinne...
Private vmWert As String * cmMaxStringLength 'Es muß ein String fester Länge sein

'-------------------------------------------------

'Liest aus [section] den Wert für "zulesenderwert=" aus und gibt ihn zurueck
'Beispiel: back = getinivalue("schalter", "defosmode")

Function GetIniValue(section As String, zulesenderwert As String, Optional IniFileName As String = cmIniStandardname) As String
    Call GetPrivateProfileString(section, zulesenderwert, cmIniFaultValue, vmWert, cmMaxStringLength, IniFileName)
    GetIniValue = Left$(vmWert, InStr(vmWert, Chr(0)) - 1)
End Function

'Schreibt in [section] dem wert "zusetzenderwert=" den gegenwert zu.
'Beispiel: call PutIniValue("schalter", "defosmode", "20517")
'OHNE "Call" geht's nicht !!!!!! Dann krieg ich 'nen Fehler!

Sub PutIniValue(section As String, zusetzenderwert As String, ByVal gegenwert As String, Optional IniFileName As String = cmIniStandardname)
    If gegenwert = "" Then gegenwert = Chr(0)
    'Die Funktion schreibt den Wert nur, falls es auch einen Gegenwert gibt
    'Beim Laden eines Wertes wuerde jedoch ein Fehler zurückgegeben, falls der Wert nicht existiert
    Call WritePrivateProfileString(section, zusetzenderwert, gegenwert, IniFileName)
End Sub

Also besten Dank nochmal.
Ciao,
Marc

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

StefanBerlitz
Ehrenmitglied V.I.P. h.c.
IT Admin (CAx)



Sehen Sie sich das Profil von StefanBerlitz an!   Senden Sie eine Private Message an StefanBerlitz  Schreiben Sie einen Gästebucheintrag für StefanBerlitz

Beiträge: 8756
Registriert: 02.03.2000

SunZu sagt:
Analysiere die Vorteile, die
du aus meinem Ratschlag ziehst.
Dann gliedere deine Kräfte
entsprechend und mache dir
außergewöhnliche Taktiken zunutze.

erstellt am: 07. Jan. 2002 12:54    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für marc.scherer 10 Unities + Antwort hilfreich

Hallo Marc,

schön, dass es geklappt hat, noch eben kurz zur Info:

Zitat:

' Wofür mag das sein? Na egal lassen wir's mal lieber drinne...
Private vmWert As String * cmMaxStringLength 'Es muß ein String fester Länge sein


Die API-Funktionen brauchen sogenannte Null-Byte-terminierte String, also einen String der mit einem CHR$(0) endet. Bei Deklaration von festen Strings werden automatiusch alle Stellen mit CHR$(0) initialisiert und du kannst einfach mit der Left-Funktion dann den Wert bis zum ersten 0 lesen.

Zitat:

'OHNE "Call" geht's nicht !!!!!! Dann krieg ich 'nen Fehler!


Das liegt daran, dass WritePrivateProfileString eine Funktion ist und einen Rückgabewert liefert. Den mußt du entweder benutzen oder wegwerfen, und das geht mit dem Call (ähnlich VOID in C)

Ciao,
Stefan

------------------
Inoffizielle Solidworks Hilfeseite
http://solidworks.cad.de
EMail: Stefan.Berlitz@solidworks.cad.de

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2025 CAD.de | Impressum | Datenschutz