Adams Posted September 2, 2015 Posted September 2, 2015 With Autoit 3.3.12.0 a script like the one attached was reading the file "sync_config.db" of google drive, located at %LOCALAPPDATA%\Google\Drive returning into var $sCloudFolder the value "C:\Users\Adams\Google Drive".Now, with Autoit 3.3.14.1, the same script, reading the same file, return into var a long string of characters.I made a text version of the file using copy and paste to observe the correct behavior.I think that the cause is the new method of decoding, but I could not figure out how to solve.expandcollapse popup#include-once #include <FileConstants.au3> #include <Constants.au3> ; if the Google Drive configuration file exists, it is read If FileExists("sync_config.db") Then ; open the Google Drive configuration file in reading $Handle_GoogleDrive_R = FileOpen("sync_config.db", $FO_READ) If $Handle_GoogleDrive_R = -1 Then ; Check if file opened for reading OK MsgBox(0, "Error", "An error occurred when reading the file " & "sync_config.db") Exit EndIf ; reading Google Drive configuration file $File_GoogleDrive = FileRead($Handle_GoogleDrive_R) ConsoleWrite("$File_GoogleDrive = " & $File_GoogleDrive & @CR) ; find folder path initial position $Start = 1 $Find = "local_sync_root_pathvalue\\?\" $Result = StringInStr($File_GoogleDrive, $Find, 0, 1, $Start) ; find folder path final position $Start = $Result + 29 $Find = "" $Result = StringInStr($File_GoogleDrive, $Find, 0, 1, $Start) $Len = $Result - $Start ; folder for Google Drive Service $sCloudFolder = StringMid($File_GoogleDrive, $Start, $Len) ConsoleWrite("$sCloudFolder = " & $sCloudFolder & @CR) ; close Google Drive configuration file FileClose($Handle_GoogleDrive_R) EndIf sync_config_original.db sync_config_copy.db Adams
Celtic88 Posted September 2, 2015 Posted September 2, 2015 #include <SQLite.au3> #include <Array.au3> _SQLite_Startup() _SQLite_Open(@ScriptDir & "\sync_config_original.db") Local $hQuery, $aRow, $Arraydb[1][3] _SQLite_Query(-1, "SELECT * FROM data;", $hQuery) While _SQLite_FetchData($hQuery, $aRow, False, False) = $SQLITE_OK $Arraydb[0][0] += 1 ReDim $Arraydb[$Arraydb[0][0] + 1][3] $Arraydb[$Arraydb[0][0]][0] = $aRow[0] $Arraydb[$Arraydb[0][0]][1] = $aRow[1] $Arraydb[$Arraydb[0][0]][2] = $aRow[2] If $aRow[0] = "feature_switch" Or $aRow[0] = "tango_storage" Then $Arraydb[$Arraydb[0][0]][2] = _base64decode($aRow[2]) WEnd _SQLite_QueryFinalize($hQuery) _SQLite_Close() _SQLite_Shutdown() _ArrayDisplay($Arraydb) Func _base64decode($sb64string) Local $a_call = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sb64string, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $a_call[0] Then Return SetError(1, 0, "") Local $a = DllStructCreate("byte[" & $a_call[5] & "]") $a_call = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sb64string, "dword", 0, "dword", 1, "struct*", $a, "dword*", $a_call[5], "ptr", 0, "ptr", 0) If @error Or Not $a_call[0] Then Return SetError(2, 0, "") Return DllStructGetData($a, 1) EndFunc ;==>_base64decode Adams 1
jchd Posted September 2, 2015 Posted September 2, 2015 (edited) You probably shouldn't post actual private data like this. Anyway, this file is an SQLite database, which you can open and query with a lot of external tools (try SQLite Expert freeware for example), the SQLite command-line tools (sqlite.exe) or even with your own AutoIt code (SQLite UDF is included in the standard distribution) **.There is zero chance you can reliably extract anything from this king of file by simply using FileRead nor any other "flat" file function.** [like Celtic88 just did] Edited September 2, 2015 by jchd This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)
Adams Posted September 3, 2015 Author Posted September 3, 2015 Thankyou Celtic88. Ok, your solution working but the approach is more different. And thankyou jchd but you say "There is zero chance" with autoit 3.3.14.1? Because with 3.3.12.0 I was able to read this file using FileRead. The question is: what is changed? Adams
Adams Posted September 3, 2015 Author Posted September 3, 2015 (edited) Eureka . I used $FO_UTF16_LE + $FO_ANSI in FileOpen and now the script works. I tried all different "mode" to open the file but had not thought to mix two.expandcollapse popup#include-once #include <FileConstants.au3> #include <Constants.au3> ; if the Google Drive configuration file exists, it is read If FileExists("sync_config.db") Then ; open the Google Drive configuration file in reading $Handle_GoogleDrive_R = FileOpen("sync_config.db", $FO_UTF16_LE + $FO_ANSI) If $Handle_GoogleDrive_R = -1 Then ; Check if file opened for reading OK MsgBox(0, "Error", "An error occurred when reading the file " & "sync_config.db") Exit EndIf ; reading Google Drive configuration file $File_GoogleDrive = FileRead($Handle_GoogleDrive_R) ConsoleWrite("$File_GoogleDrive = " & $File_GoogleDrive & @CR) ; find folder path initial position $Start = 1 $Find = "local_sync_root_pathvalue\\?\" $Result = StringInStr($File_GoogleDrive, $Find, 0, 1, $Start) ; find folder path final position $Start = $Result + 29 $Find = "" $Result = StringInStr($File_GoogleDrive, $Find, 0, 1, $Start) $Len = $Result - $Start ; folder for Google Drive Service $sCloudFolder = StringMid($File_GoogleDrive, $Start, $Len) ConsoleWrite("$sCloudFolder = " & $sCloudFolder & @CR) ; close Google Drive configuration file FileClose($Handle_GoogleDrive_R) EndIf Edited September 3, 2015 by Adams Adams
jchd Posted September 3, 2015 Posted September 3, 2015 This is utterly ridiculous.And please don't quote only part of my phrases: I said "There is zero chance you can reliably extract anything from this king of file by simply using FileRead nor any other "flat" file function." This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)
Adams Posted September 13, 2015 Author Posted September 13, 2015 This is utterly ridiculous.And please don't quote only part of my phrases: I said "There is zero chance you can reliably extract anything from this king of file by simply using FileRead nor any other "flat" file function."Why do you say that? I read the file and extract the information I needed. And I'm sorry for the partial quote of your intervention but I wanted to take your sentence to ask if you mean that there were no possibilities with version 3.3.14.1. Adams
jchd Posted September 13, 2015 Posted September 13, 2015 Why? Because it's true!You insist on reading an SQLite database as if it was a text file and this is definitely wrong. Use the right tool for that task and stop messing with unreliable ways. It has nothing to do with what AutoIt version you use, even with which language you use to read and "extract" data from the database. If you really need to check by yourself I provide you with a valid SQLite database containing the actual data your file contains (from the SQLite point of view) but from which you won't extract the correct information with your "flat file" read approach. sync_config1.db This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)
Adams Posted September 13, 2015 Author Posted September 13, 2015 Why? Because it's true!You insist on reading an SQLite database as if it was a text file and this is definitely wrong. Use the right tool for that task and stop messing with unreliable ways. It has nothing to do with what AutoIt version you use, even with which language you use to read and "extract" data from the database. If you really need to check by yourself I provide you with a valid SQLite database containing the actual data your file contains (from the SQLite point of view) but from which you won't extract the correct information with your "flat file" read approach. sync_config1.dbOf course, I agree that to read a sql file, my approach is not the most appropriate. But for what it takes to me and to read "my" file (and not others) the method worked. Thanks for the advice anyway: if I read another SQLite database with more complex needs I will use the most appropriate method. Adams
guinness Posted September 13, 2015 Posted September 13, 2015 (edited) my approach is not the most appropriateCorrection, that should be "my approach is totally wrong". I agree with @jchd on this one. Edited September 13, 2015 by guinness Typo UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
Adams Posted September 13, 2015 Author Posted September 13, 2015 Correct, that should be "my approach is totally wrong". I agree with @jchd on this one. Ok Cloud Folders.Exe Adams
guinness Posted September 13, 2015 Posted September 13, 2015 I don't download executables from untrusted sources. UDF List: _AdapterConnections() • _AlwaysRun() • _AppMon() • _AppMonEx() • _ArrayFilter/_ArrayReduce • _BinaryBin() • _CheckMsgBox() • _CmdLineRaw() • _ContextMenu() • _ConvertLHWebColor()/_ConvertSHWebColor() • _DesktopDimensions() • _DisplayPassword() • _DotNet_Load()/_DotNet_Unload() • _Fibonacci() • _FileCompare() • _FileCompareContents() • _FileNameByHandle() • _FilePrefix/SRE() • _FindInFile() • _GetBackgroundColor()/_SetBackgroundColor() • _GetConrolID() • _GetCtrlClass() • _GetDirectoryFormat() • _GetDriveMediaType() • _GetFilename()/_GetFilenameExt() • _GetHardwareID() • _GetIP() • _GetIP_Country() • _GetOSLanguage() • _GetSavedSource() • _GetStringSize() • _GetSystemPaths() • _GetURLImage() • _GIFImage() • _GoogleWeather() • _GUICtrlCreateGroup() • _GUICtrlListBox_CreateArray() • _GUICtrlListView_CreateArray() • _GUICtrlListView_SaveCSV() • _GUICtrlListView_SaveHTML() • _GUICtrlListView_SaveTxt() • _GUICtrlListView_SaveXML() • _GUICtrlMenu_Recent() • _GUICtrlMenu_SetItemImage() • _GUICtrlTreeView_CreateArray() • _GUIDisable() • _GUIImageList_SetIconFromHandle() • _GUIRegisterMsg() • _GUISetIcon() • _Icon_Clear()/_Icon_Set() • _IdleTime() • _InetGet() • _InetGetGUI() • _InetGetProgress() • _IPDetails() • _IsFileOlder() • _IsGUID() • _IsHex() • _IsPalindrome() • _IsRegKey() • _IsStringRegExp() • _IsSystemDrive() • _IsUPX() • _IsValidType() • _IsWebColor() • _Language() • _Log() • _MicrosoftInternetConnectivity() • _MSDNDataType() • _PathFull/GetRelative/Split() • _PathSplitEx() • _PrintFromArray() • _ProgressSetMarquee() • _ReDim() • _RockPaperScissors()/_RockPaperScissorsLizardSpock() • _ScrollingCredits • _SelfDelete() • _SelfRename() • _SelfUpdate() • _SendTo() • _ShellAll() • _ShellFile() • _ShellFolder() • _SingletonHWID() • _SingletonPID() • _Startup() • _StringCompact() • _StringIsValid() • _StringRegExpMetaCharacters() • _StringReplaceWholeWord() • _StringStripChars() • _Temperature() • _TrialPeriod() • _UKToUSDate()/_USToUKDate() • _WinAPI_Create_CTL_CODE() • _WinAPI_CreateGUID() • _WMIDateStringToDate()/_DateToWMIDateString() • Au3 script parsing • AutoIt Search • AutoIt3 Portable • AutoIt3WrapperToPragma • AutoItWinGetTitle()/AutoItWinSetTitle() • Coding • DirToHTML5 • FileInstallr • FileReadLastChars() • GeoIP database • GUI - Only Close Button • GUI Examples • GUICtrlDeleteImage() • GUICtrlGetBkColor() • GUICtrlGetStyle() • GUIEvents • GUIGetBkColor() • Int_Parse() & Int_TryParse() • IsISBN() • LockFile() • Mapping CtrlIDs • OOP in AutoIt • ParseHeadersToSciTE() • PasswordValid • PasteBin • Posts Per Day • PreExpand • Protect Globals • Queue() • Resource Update • ResourcesEx • SciTE Jump • Settings INI • SHELLHOOK • Shunting-Yard • Signature Creator • Stack() • Stopwatch() • StringAddLF()/StringStripLF() • StringEOLToCRLF() • VSCROLL • WM_COPYDATA • More Examples... Updated: 22/04/2018
jchd Posted September 13, 2015 Posted September 13, 2015 Adams,Your "method" will work as long as the sequence of updates in the database leaves the row you're after in the same place. And I bet my keyboard that you don't have control over how "your" DB will evolve since it isn't really yours: it's managed by Google, not you. Google may have to change things a lot over time and you'll be reading the very same free page in the DB while the actual correct data will reside elsewhere. Said otherwise, this is utterly unreliable and you don't have the faintest clue as to when it will silently fall apart. This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)
Developers Jos Posted September 13, 2015 Developers Posted September 13, 2015 @jchd, Not sure I've seen you this persistent before. Please watch your blood pressure and when he doesn't get it by now it surely is a lost case... But it is his case. ;-) Jos Skysnake 1 SciTE4AutoIt3 Full installer Download page - Beta files Read before posting How to post scriptsource Forum etiquette Forum Rules Live for the present, Dream of the future, Learn from the past.
jchd Posted September 13, 2015 Posted September 13, 2015 I found it interesting to see how deep wrong ideas can grow their roots. As you say you and me don't care since we're not the ones who shall hit bricks at full speed. mLipok 1 This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe hereRegExp tutorial: enough to get startedPCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta. SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)
Skysnake Posted September 14, 2015 Posted September 14, 2015 @jchd, I respect your opinion. I follow many of the topics you post on for your insightful commentary. I made a mental note of your response on this one. Thought that its easy to find a quick and dirty fix that will turn into a disaster later. I agree with advice by @Jos. Skysnake Why is the snake in the sky?
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