Deutsches AutoHotkey Homepage AutoHotkey Community
Wir helfen uns gegenseitig aus der Patsche
 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   RegistrierenRegistrieren 
 ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

INI Auslesen

 
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe!
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Dr_Mitch



Anmeldedatum: 30.10.2006
Beiträge: 6

BeitragVerfasst am: Mo Okt 30, 2006 12:17 pm    Titel: INI Auslesen Antworten mit Zitat

Hi Leute

Habe folgende Anforderung:
Möchte bei einem INI- File zuerst alle Sections auslesen, danach alle Keys der bereits ermittelten Section.
Leider habe ich aber keine Vorgabe, wie das INI- File genau aufgebaut ist (keine Ahnung wieviele Sections bzw. wieviele Keys pro Section gibt). Aus diesem Grund muß ich also das File Parsen. Leider weis ich aber nicht, wie ich das mittels Autohotkey anstelle.
Würde mich über Eure Vorschläge freuen.
mfg
Mitch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1896
Wohnort: Österreich

BeitragVerfasst am: Mo Okt 30, 2006 12:32 pm    Titel: Antworten mit Zitat

Folgende Befehle wirst sicherlich brauchen:
1) FileRead
2) parsing Loop (Loop, Parse, FileContent, `n, `r)
3) if InStr

Alles weitere steht in der AutoHotkey-Hilfe..

Tipp:
Das Kapitel "String Management" mag interessant sein für dich Wink

Thalon
_________________
Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr_Mitch



Anmeldedatum: 30.10.2006
Beiträge: 6

BeitragVerfasst am: Di Okt 31, 2006 9:40 am    Titel: Antworten mit Zitat

Hi Thalon

Danke für deine schnelle Antowrt. Ein Beispiel, wenn Möglich, wäre aber wünschenswert.
mfg
Mitch
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
BoBo
Gast





BeitragVerfasst am: Di Okt 31, 2006 10:01 am    Titel: Antworten mit Zitat

Zitat:
Ein Beispiel, wenn Möglich, wäre aber wünschenswert
Die stehn auch in der Hilfe. Zu jedem Befehl den Thalon genannt hat. Go for it!
Nach oben
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1896
Wohnort: Österreich

BeitragVerfasst am: Di Okt 31, 2006 10:20 am    Titel: Antworten mit Zitat

Ein paar Stellen sind etwas schwieriger. Folgender Code funktioniert für alle Sektionen außer der letzten (das darfst selbst machen ^^):
Code:
Gui, Add, Listbox, w200 r10 vSection gSections
Gui, Add, Listbox, w200 r10 vKeys

FileRead, FileContent, Einheiten.ini
Sections=
Loop, Parse, FileContent, `n, `r
{
   if InStr(A_LoopField, "[")
   {
      StringReplace, Section, A_LoopField, [
      StringReplace, Section, Section, ]
      Sections = %Sections%%Section%|
   }
}
GuiControl, , Section, %Sections%
Gui, Show
return

Sections:
GuiControlGet, Section, , Section

StartPos := InStr(FileContent, "[" . Section . "]")      ;Ermitteln des Sections-Startes
SectionLen := StrLen(Section)      ;Zwischenvariable für die Zeichenlänge des Sections-Namens (wird 2x benötigt)

;Hier wird die Sektion selbst vom Anfang bis zum Ende aus der restlichen Datei gelöst:
StringMid, AllSectionKeys, FileContent, % StartPos + 2 + SectionLen , % InStr(FileContent, "[", 0, StartPos + 1) - StartPos - 3 - SectionLen

;Hier werden die Keys und Werte in ein Array eingelesen. In Key0 befindet sich die Anzahl der gültigen Keys.
Key0 = 0
Loop, Parse, AllSectionKeys, `n, `r
{
   Gleich_Pos := InStr(A_LoopField, "=")
   if Gleich_Pos > 0
   {
      Key0 ++
      StringLeft, Key%Key0%, A_LoopField, % Gleich_Pos - 1
      StringTrimLeft, Value%Key0%, A_LoopField, % Gleich_Pos
   }
}

;Nur mehr Ausgabe:
KeyAusgabe = |   ;Damit die Listbox immer komplett neu gefüllt wird und nicht nur Inhalt angehängt
Loop, %Key0%
{
   KeyAusgabe = % KeyAusgabe . Key%A_Index% . "=" . Value%A_Index% . "|"
}
GuiControl, , Keys, %KeyAusgabe%
return
Um den Code zu verstehen und zu finalisieren musst ohnehin die Hilfe bemühen Wink

@BoBo
Sowas wurde schon öfter mal gefragt. Ich musste nur zusammenkopieren aus meinen eigenen Sourcen *gg*

Thalon
_________________
Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Dr_Mitch



Anmeldedatum: 30.10.2006
Beiträge: 6

BeitragVerfasst am: Di Okt 31, 2006 2:08 pm    Titel: Antworten mit Zitat

Hi Leute

Habe soeben ein wenig mit Euren Codes rumgespielt und folgendes Programm gebastelt.

Code:
IniFileName= Remotedesktopverwaltung.ini

Gui, Add, Listbox, w200 r10 vSection gSections
Gui, Add, Listbox, w200 r10 vKeys

FileRead, FileContent, %IniFileName%
Sections=
Loop, Parse, FileContent, `n, `r
{
   if InStr(A_LoopField, "[")
   {
      StringReplace, Section, A_LoopField, [
      StringReplace, Section, Section, ]
      Sections = %Sections%%Section%|
   }
}
GuiControl, , Section, %Sections%
Gui, Show
return

Sections:
GuiControlGet, Section, , Section
GuiControl, , Keys, |
GuiControl,,Editkey, %Section%
loop, Read, %IniFileName%
{
  if A_LoopReadLine contains [%Section%]
  {
    startWrite = 1
    continue
  }
 
  if startWrite = 1
  {
    if A_LoopReadLine contains [
      break
   
    if A_LoopReadline contains `;       ; take notice of the "escaped" ";" but: each ";" causes the "continue", not only that on the first position
      continue                                   ; there has to be done more
     
    Loop, parse, A_LoopReadLine, =   ; loop the line, delimited by =, keep the first portion
    {
      key = %A_LoopField%
      allekeys:= (allekeys . key . "|")
      break
    }
     
  }
}
GuiControl, , Keys, %allekeys%
allekeys=
startwrite=
return


Besten Dank an alle, dass ihr mir so schnell geholfen habt.
Mitch

@Bobo
Habe die Anfrage auch ins Englisch Forum gestellt, weil ich nicht wußte, wie gut das deutschsprachige Forum besucht ist.

@Thalon
Habe erst vor 3 Tagen mit Autohotkey angefangen und brauchte das Skript sehr schnell für die Firma. Ansonsten lese ich mir schon die Hilfe durch Wink


PS: Hoffe, ich darf wieder einmal eine Anfrage ins Forum stellen?!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Thalon



Anmeldedatum: 25.10.2005
Beiträge: 1896
Wohnort: Österreich

BeitragVerfasst am: Di Okt 31, 2006 2:38 pm    Titel: Antworten mit Zitat

Diese Zeile ist eine Leiche, oder?
Code:
GuiControl,,Editkey, %Section%
Zumindest finde ich kein Control namens Editkey, noch wird das sonst wo verwendet...

Ansonsten sieht es schon ganz gut aus. Ein anderer Ansatz, beim Lesen der Sektion. Ich denke er ist geringfügig langsamer bei größeren Dateien, da du für jede Zeile eine Abfrage fährst, anstatt den Anfang zu suchen, aber ist kaum relevant *gg* (schlimmstenfalls Millisekunden bei sehr großen Datenmengen).

Deine Parse-Routine für die Keys finde ich äußerst interessant. Ist sicher schneller als mein verwendeter Code! (okay.. auch minimalst, weil ohnehin alles ohne Festplattenzugriffe abläuft).
Edit: Seh grad, dass das ein Merge aus dem englischen Forum war *gg*

Für die ersten 3 Tage gar nicht übel!

Und nein, bei der nächsten Anfrage wirst gelyncht!
Als Mod, seh ich wo du wohnst und kann den Killertrupp direkt wegschicken!

Quatsch.. natürlich darfst wieder schreiben Very Happy

Thalon
_________________
Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    AutoHotkey Community Foren-Übersicht -> Ich brauche Hilfe! Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de