Jump to content

Reading a file .db


Adams
 Share

Recommended Posts

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.

#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

Link to comment
Share on other sites

#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

;)

Link to comment
Share on other sites

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 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 here
RegExp tutorial: enough to get started
PCRE 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)

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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.

#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 by Adams

Adams

Link to comment
Share on other sites

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 here
RegExp tutorial: enough to get started
PCRE 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)

Link to comment
Share on other sites

  • 2 weeks later...

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

Link to comment
Share on other sites

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 here
RegExp tutorial: enough to get started
PCRE 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)

Link to comment
Share on other sites

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

Of 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

Link to comment
Share on other sites

my approach is not the most appropriate

Correction, that should be "my approach is totally wrong". I agree with @jchd on this one. 

Edited 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 parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

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 parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Link to comment
Share on other sites

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 here
RegExp tutorial: enough to get started
PCRE 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)

Link to comment
Share on other sites

  • Developers

@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

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.
  :)

Link to comment
Share on other sites

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.

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 here
RegExp tutorial: enough to get started
PCRE 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)

Link to comment
Share on other sites

@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?

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...