 |
AutoHotkey Community Wir helfen uns gegenseitig aus der Patsche
|
| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
Dr_Mitch
Anmeldedatum: 30.10.2006 Beiträge: 6
|
Verfasst am: Mo Okt 30, 2006 12:17 pm Titel: INI Auslesen |
|
|
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 |
|
 |
Thalon
Anmeldedatum: 25.10.2005 Beiträge: 1896 Wohnort: Österreich
|
Verfasst am: Mo Okt 30, 2006 12:32 pm Titel: |
|
|
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
Thalon _________________ Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe |
|
| Nach oben |
|
 |
Dr_Mitch
Anmeldedatum: 30.10.2006 Beiträge: 6
|
Verfasst am: Di Okt 31, 2006 9:40 am Titel: |
|
|
Hi Thalon
Danke für deine schnelle Antowrt. Ein Beispiel, wenn Möglich, wäre aber wünschenswert.
mfg
Mitch |
|
| Nach oben |
|
 |
BoBo Gast
|
Verfasst am: Di Okt 31, 2006 10:01 am Titel: |
|
|
| 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
|
Verfasst am: Di Okt 31, 2006 10:20 am Titel: |
|
|
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
@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 |
|
 |
Dr_Mitch
Anmeldedatum: 30.10.2006 Beiträge: 6
|
Verfasst am: Di Okt 31, 2006 2:08 pm Titel: |
|
|
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
PS: Hoffe, ich darf wieder einmal eine Anfrage ins Forum stellen?! |
|
| Nach oben |
|
 |
Thalon
Anmeldedatum: 25.10.2005 Beiträge: 1896 Wohnort: Österreich
|
Verfasst am: Di Okt 31, 2006 2:38 pm Titel: |
|
|
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
Thalon _________________ Mein Motto: Hilfe zur Selbsthilfe!
Teildeutsche Hilfe (CHM)!! und Deutsche Online-Hilfe |
|
| Nach oben |
|
 |
|
|
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
|