ResNullius Posted June 2, 2008 Share Posted June 2, 2008 (edited) UPDATE: 09-June-08 All functions completed: now complete mimic of standard IniRead/Write Functions with same parameters, returns, and errors. Re-write of some functions: see download in this postUPDATE: 03-June-08 Now named _IniString_Read() etc. & code cleaned up/simplified more. Thanks MrCreatoR!UPDATE: 03-June-08 Rewrote some of the code to make better use of RegExp and reduce complexity(?)UPDATE: 02-June-08 Added _Ini_InMem_Delete(), Renamed UDF to Ini_InMem.au3 as now does more than just readOver here http://www.autoitscript.com/forum/index.ph...showtopic=72602 CrazyMick was looking for a way to access the contents of an Ini file that's stored on a web server without downloading the file to the hard drive. Obviously _InetGetSource() is the answer, but then being a noob with AutoIt CrazyMick didn't know how to parse the data once it was stored in a string variable.Anyway, I put together these _Ini_InMem_Read() functions.They behave just like the standard IniRead() functions with the same returns and error setting, except that instead of an actual Ini file name, they take a variable containing a string representing an Ini file structure as the first parameter.Certainly they will be of limited use but I thought I would post them anyway.Can also be used with reading an Ini file into memory; $var = FileRead("some.ini").Notes: Haven't cleaned up all the code yet, may be some stray references to variables that aren't actually used.Some brighter coder could probably simplify these functions, and if so, I'm open to suggestions.Edit: Some brighter coder did... see MrCreatoR's post below: _IniString() FunctionsUpdate: this attachement contains the latest version and replaces MrCreatoR's in post # 9 below IniString_UDF.zip ( 3.18K ) Number of downloads: 7IniString_UDF.zip Edited June 10, 2008 by ResNullius Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted June 2, 2008 Moderators Share Posted June 2, 2008 Awesome, I had thought about adding a string option to these http://www.autoitscript.com/forum/index.ph...st&p=427420 just last night. Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
ResNullius Posted June 2, 2008 Author Share Posted June 2, 2008 Awesome, I had thought about adding a string option to these http://www.autoitscript.com/forum/index.ph...st&p=427420 just last night.Golly! Thanks SmOke_N I haven't bothered with the rest of the Ini functions yet, but am planning to add them, so it'll be more of an "_Ini_InMem" UDF.Or should I call them "_Ini_AsStr"? Or something else? Naming and other suggestions welcome! Link to comment Share on other sites More sharing options...
CrazyMick Posted June 2, 2008 Share Posted June 2, 2008 Wow, really awesome. I have to say, that I don´t understand everything, written in the _Ini_InMem_Read.au3 so I´ve to read some parts more than once or twice but it helps me to get a better understanding how it works. Thank you very much for helping me with that problem. Greets Mick Link to comment Share on other sites More sharing options...
ResNullius Posted June 3, 2008 Author Share Posted June 3, 2008 Wow, really awesome.I have to say, that I don´t understand everything, written in the _Ini_InMem_Read.au3 so I´ve to read some parts more than once or twice but it helps me to get a better understanding how it works.Thank you very much for helping me with that problem.GreetsMickYour welcome Mick. If you have any questions, just ask. Link to comment Share on other sites More sharing options...
ResNullius Posted June 3, 2008 Author Share Posted June 3, 2008 Updated: Added _Ini_InMem_Delete(), Renamed UDF to Ini_InMem.au3 as now does more than just read Will add _Ini_InMem_RenameSection, _Ini_InMem_Write, and _Ini_InMem_WriteSection just for the sake of completeness. Link to comment Share on other sites More sharing options...
steve8tch Posted June 3, 2008 Share Posted June 3, 2008 a name suggestion Firstly - well done - good idea.. _Ini_InMem_xxx sounds quite awkward - I was trying to think of a name that reflected that the ini file was a String at this point - so I was trying names along the lines _iniStr_Read( _iniStr_ReadSection( etc... just a thought.. Link to comment Share on other sites More sharing options...
ResNullius Posted June 4, 2008 Author Share Posted June 4, 2008 (edited) a name suggestion Firstly - well done - good idea.. _Ini_InMem_xxx sounds quite awkward - I was trying to think of a name that reflected that the ini file was a String at this point - so I was trying names along the lines _iniStr_Read( _iniStr_ReadSection( etc... just a thought..Thanks steve8tch. Yeah, I'm not terribly happy with the name either. I'm leaning towards something like _Ini_AsStr_Read() etc. Edit: Actually maybe not such a good name for the all lower case users: _Ini_asstr_read() But still open to suggestions... Also, updated the code to use RegExp better. See 1st post [grumble] I hate how you can't use the "autoit" code tags when you edit a post, always get a TAG error message [/grumble] Edited June 4, 2008 by ResNullius Link to comment Share on other sites More sharing options...
MrCreatoR Posted June 4, 2008 Share Posted June 4, 2008 Really Nice, i like the idea (Btw, i also thought about it some time ago) .I modified the UDF a little(?)...* Renamed «_Ini_InMem_...» to «_IniString_.....».* Added 2 functions from the "to do"; _IniString_RenameSection() and _IniString_Write() - But they needs more testing i think...* Changed the examples.Modified version: IniString_UDFs.zip Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
ResNullius Posted June 4, 2008 Author Share Posted June 4, 2008 (edited) Really Nice, i like the idea (Btw, i also thought about it some time ago) . I modified the UDF a little(?)... * Renamed «_Ini_InMem_...» to «_IniString_.....». * Added 2 functions from the "to do"; _IniString_RenameSection() and _IniString_Write() - But they needs more testing i think... * Changed the examples. Modified version: IniString_UDFs.zipGreat! Thanks for cleaning up the code: I was going to do it once I got around to getting all the functions complete. Also, I like your naming convention, so that's what it will be. I should be able to complete the WriteSection() function today. Until then, I'm editing the first post to point to your zip download. Cheers Edited June 4, 2008 by ResNullius Link to comment Share on other sites More sharing options...
ResNullius Posted June 9, 2008 Author Share Posted June 9, 2008 All functions now complete! See 1st post for updated zip containing udf and examples. Many thanks to co-author MrCreatoR Fixed/re-wrote some existing functions. Please provide feedback if you use. Thanks. Link to comment Share on other sites More sharing options...
MrCreatoR Posted June 9, 2008 Share Posted June 9, 2008 (edited) Excelent . One remark... imo, this: While StringRight($sTempIni, 2) = @CRLF $sTempIni = StringTrimRight($sTempIni, 2) WEnd not really neccessary, the same can be done using StringStripWS($sTempIni, 2). http://www.autoitscript.com/autoit3/docs/functions/StringStripWS.htm Strips the white space in a string. .... Whitespace includes Chr(9) thru Chr(13) which are HorizontalTab, LineFeed, VerticalTab, FormFeed, and CarriageReturn. Edited May 15, 2011 by MrCreatoR Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
ResNullius Posted June 10, 2008 Author Share Posted June 10, 2008 (edited) Excelent . One remark... imo, this: While StringRight($sTempIni, 2) = @CRLF $sTempIni = StringTrimRight($sTempIni, 2) WEnd not really neccessary, the same can be done using StringStripWS($sTempIni, 2).Whoops! It's always the simple things we overlook. Code updated. Thanks again MrCreatoR! PS: When did you change from MsCreatoR to MrCreatoR (from a Ms. to a Mr. ) ? Edited June 10, 2008 by ResNullius Link to comment Share on other sites More sharing options...
MrCreatoR Posted June 10, 2008 Share Posted June 10, 2008 (edited) When did you change from MsCreatoR to MrCreatoR (from a Ms. to a Mr. ) ?A few month ago or so (Edit: 3rd May 2008 - 12:01 AM )... at the begining my english was not so good, i thought Ms. it's like Mister , But today i realize that Mister it's with Mr... or it's not? Btw: you can see the «Display name history» in my profile (under the "Options"), or here (the same). Edited June 10, 2008 by MrCreatoR Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
WeMartiansAreFriendly Posted June 22, 2009 Share Posted June 22, 2009 Will be very useful. Don't bother, It's inside your monitor!------GUISetOnEvent should behave more like HotKeySet() Link to comment Share on other sites More sharing options...
autoall Posted August 10, 2009 Share Posted August 10, 2009 great work, I will try it. Link to comment Share on other sites More sharing options...
Malkey Posted August 13, 2009 Share Posted August 13, 2009 A non-array approach. Where an array is not absolutely necessary, why not just get the required string from the ini string. I might be missing something, but this example does look simpler - to me anyway. Just a thought, for your consideration. ; #include <Inet.au3> $sSource_Mem_Ini = _INetGetSource("http://www.autoitscript.com/autoit3/files/beta/update.dat") ;or ;$sSource_Mem_Ini = FileRead(@ScriptDir & "\AutoIt.dat") ;read in ini from saved file ;============ _IniString_ReadValue - Example ============ $sIniRead = _IniString_ReadValue($sSource_Mem_Ini, "AutoIt", "FileSize", "NotFound") MsgBox(4096 + 64, "_IniReadValue: [code] - filesize", $sIniRead) Func _IniString_ReadValue($sIni, $sSection, $sKey, $sDefault = "") Local $sRet If StringInStr($sIni, "[" & $sSection & "]", 2) <> 0 Then ; Check if $sSection section exists. Local $sSect = StringRegExpReplace($sIni, "(?i)(?s)(?:.*)(?-s)(\[" & $sSection & "\]\v+(.+=.*\v)*)(?s)(?:.*)", "\1") ; Get entire $sSection section as string. ;ConsoleWrite($sSect & @CRLF) If StringLower(StringRegExpReplace($sSect, "(?i)(?m)(?:.*\v+)*(^" & $sKey & ")(=.*)\v+(?s)(.*)\z", "\1")) = StringLower($sKey) Then ; Check if $sKey exists. $sRet = StringRegExpReplace($sSect, "(?i)(?m)(?:.*\v+)*(?:^" & $sKey & "=)(.*)\v+(?s)(.*)\z", "\1") ; Get corresponding value of $sKey. Else $sRet = $sDefault EndIf Else $sRet = $sDefault EndIf Return $sRet EndFunc ;==>_IniString_ReadValue ;============ _IniString_ReadValue - Example ============ ; Link to comment Share on other sites More sharing options...
ResNullius Posted August 13, 2009 Author Share Posted August 13, 2009 A non-array approach.Where an array is not absolutely necessary, why not just get the required string from the ini string.I might be missing something, but this example does look simpler - to me anyway.Just a thought, for your consideration. Thanks for the input Malkey.I've been meaning to revisit these functions and tighten them up; they are after all a year old and I've learned a lot more about RegExp in that time.I think the array approach just carried through from the original learning of using RegExp to return matches.PS: But really now, who ever said simpler is better? Especially when showing off our ninja coder skilz >_< Link to comment Share on other sites More sharing options...
arcker Posted May 4, 2010 Share Posted May 4, 2010 A non-array approach. Where an array is not absolutely necessary, why not just get the required string from the ini string. I might be missing something, but this example does look simpler - to me anyway. Just a thought, for your consideration. ; #include <Inet.au3> $sSource_Mem_Ini = _INetGetSource("http://www.autoitscript.com/autoit3/files/beta/update.dat") ;or ;$sSource_Mem_Ini = FileRead(@ScriptDir & "\AutoIt.dat") ;read in ini from saved file ;============ _IniString_ReadValue - Example ============ $sIniRead = _IniString_ReadValue($sSource_Mem_Ini, "AutoIt", "FileSize", "NotFound") MsgBox(4096 + 64, "_IniReadValue:- filesize", $sIniRead) Func _IniString_ReadValue($sIni, $sSection, $sKey, $sDefault = "") Local $sRet If StringInStr($sIni, "[" & $sSection & "]", 2) <> 0 Then ; Check if $sSection section exists. Local $sSect = StringRegExpReplace($sIni, "(?i)(?s)(?:.*)(?-s)(\[" & $sSection & "\]\v+(.+=.*\v)*)(?s)(?:.*)", "\1") ; Get entire $sSection section as string. ;ConsoleWrite($sSect & @CRLF) If StringLower(StringRegExpReplace($sSect, "(?i)(?m)(?:.*\v+)*(^" & $sKey & ")(=.*)\v+(?s)(.*)\z", "\1")) = StringLower($sKey) Then ; Check if $sKey exists. $sRet = StringRegExpReplace($sSect, "(?i)(?m)(?:.*\v+)*(?:^" & $sKey & "=)(.*)\v+(?s)(.*)\z", "\1") ; Get corresponding value of $sKey. Else $sRet = $sDefault EndIf Else $sRet = $sDefault EndIf Return $sRet EndFunc ;==>_IniString_ReadValue ;============ _IniString_ReadValue - Example ============ ;Hi,indeed this is faster but it is bugged ...it takes the last caracter; so @cri've changed If StringLower(StringRegExpReplace($sSect, "(?i)(?m)(?:.*v+)*(^" & $sKey & ")(=.*)v+(?s)(.*)z", "1")) = StringLower($sKey) Then ; Check if $sKey exists. $sRet = StringRegExpReplace($sSect, "(?i)(?m)(?:.*v+)*(?:^" & $sKey & "=)(.*)v+(?s)(.*)z", "1") ; Get corresponding value of $sKey.with If StringLower(StringRegExpReplace($sSect, "(?i)(?m)(?:.*\v+)*(^" & $sKey & ")(=.*)\v+(?s)(.*)\n", "\1")) = StringLower($sKey) Then ; Check if $sKey exists. $sRet = StringRegExpReplace($sSect, "(?i)(?m)(?:.*\v+)*(?:^" & $sKey & "=)(.*)\v+(?s)(.*)\n", "\1") ; Get corresponding value of $sKey. so \z by \n. It seems to work but not sure if it's the best solution. -- Arck System _ Soon -- Ideas make everything "La critique est facile, l'art est difficile" Projects :[list] [*]Au3Service : Run your exe as service V3 / Updated 29/07/2013 Get it Here [/list] Link to comment Share on other sites More sharing options...
arcker Posted July 29, 2011 Share Posted July 29, 2011 (edited) Faster than everything. Previous = 30ms Mine is around 1ms, and no more bugged. Used in a recent project for reading a "database" stored as an inifile. Func _IniString_Read($sIni, $sSection, $sKey, $sDefault = "") ;by Arcker ; On 08/04/2011 ; Only one regexp to get the value ! ; execution < 1 ms Local $sSect = StringRegExp($sIni, "(?i)(?s)(?m)(?:.*)(\["& $sSection &"\].*?^"&$sKey&"=)(.+?$)",1) ; Get entire $sSection section as string. if @error then return $sDefault Else return StringStripCR($sSect[1]) EndIf endfunc Edited July 29, 2011 by arcker -- Arck System _ Soon -- Ideas make everything "La critique est facile, l'art est difficile" Projects :[list] [*]Au3Service : Run your exe as service V3 / Updated 29/07/2013 Get it Here [/list] Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now