Jump to content
ur

Property file reading issue

Recommended Posts

ur

Hi,

 

I have a property file format configuration file for our project.

The sample file is as below.

BuildLocation:C:\Build
BuildExe:erwin Data Modeler r9.7 (64-bit)_2378.exe
Release:r9.64.02
Silent:No
InstallPath:default
Compare :No
MartUpgrade :Yes
Bit:64
ERwinUpgrade:No
License_File:150416-1952 Navigator (ca.com).lic

To read this file, I am using below code.

Func readConfig($sFilePath,$intStartCode)

;Usage: MsgBox(0,"Silent",readConfig(@ScriptDir&"\Config.txt","Silbent"))

;$sReplaceText = "Mani Prakash"
;$sFilePath = "C:\Users\KIRUD01\Desktop\Config.txt"
;$intStartCode = "BuildExe"
$arrRetArray = ""
$s = _FileReadToArray($sFilePath, $arrRetArray);Reading text file and saving it to array $s will show status of reading file..
    For $i = 1 To UBound($arrRetArray)-1
        $line = $arrRetArray[$i];retrieves taskengine text line by line
        If StringInStr($line, $intStartCode) Then
                ConsoleWrite ("Starting point "& $line &  @CRLF)
                return StringStripWS(StringSplit($line,":")[2],$STR_STRIPLEADING + $STR_STRIPTRAILING )
        EndIf
        if $i = UBound($arrRetArray)-1 then return "Not Found"
    Next
EndFunc

The above code is working to read the particular key value.

But problem is , if I try to read the key "Bit" it is giving the value of key "BuildExe" as the line contains the word "bit"..

Can you suggest how to do this. 

 

If possible I need to fix writeConfig also.

 

Func writeConfig($sFilePath,$intStartCode,$sReplaceText)

;$sReplaceText = "Mani Prakash"
;$sFilePath = "C:\Users\KIRUD01\Desktop\Config.txt"
;$intStartCode = "BuildExe"
$arrRetArray = ""
$s = _FileReadToArray($sFilePath, $arrRetArray);Reading text file and saving it to array $s will show status of reading file..
$intStartingPointFound = 0
    For $i = 1 To UBound($arrRetArray)-1
        $line = $arrRetArray[$i];retrieves taskengine text line by line
        If StringInStr($line, $intStartCode) Then
                $intStartingPointFound = 1;if found the starting point of the module to copy then set this variable to 1
                ConsoleWrite ("Starting point " &  @CRLF)
                $arrRetArray[$i] = $intStartCode & ": " & $sReplaceText
                ExitLoop
        EndIf
        if $i = UBound($arrRetArray)-1 then ConsoleWrite("Not Found" & @CRLF)
    Next
_FileWriteFromArray ($sFilePath, $arrRetArray,1)

EndFunc

 

Share this post


Link to post
Share on other sites
Melba23

ur,

Why not use the ini format for your config file? That is what the format is designed to do and then you can use the built-in INI* functions to access the settings and the problem goes away.

If you insist on your current file format, then you need to add ":" to the end of the StringInStr search string to ensure that the search is against the key and not the whole line.

And what is wrong with the "write" code?

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
ur

The confuration file format our project is using from long time.

Even I also suggested them to change them to ini format, we are changing that but to support old and existing files, we need to implement for this format also.

at present no issue with writeConfig, I thought this readConfig issue might effect somewhere the logic of writeConfig also if the same string of key is found.

One more doubt with the logic you told, if I search "bit:" it might not detect if there is space in between key and value pair like "bit  : 64".

Can you tell how to fix this also.

Share this post


Link to post
Share on other sites
Melba23

ur,

I was afraid changing the file format might not be possible.

If you have spaces in the line then just use StringStripWS to remove them:

#include <StringConstants.au3>

; Simulate reading file into an array
Global $aLines[] = [10, _
        "BuildLocation:C:\Build", _
        "BuildExe : erwin Data Modeler r9.7 (64-bit)_2378.exe", _
        "Release:r9.64.02", _
        "Silent:No", _
        "InstallPath:default", _
        "Compare :No", _
        "MartUpgrade :Yes", _
        "Bit : 64", _
        "ERwinUpgrade:No", _
        "License_File:150416-1952 Navigator (ca.com).lic"]

$intStartCode = "Bit"

For $i = 1 To $aLines[0]

    $line = $aLines[$i]

    If StringInStr(StringStripWS($line, $STR_STRIPALL), $intStartCode & ":") Then
        ConsoleWrite ("Starting point "& $line &  @CRLF)
        ConsoleWrite(StringStripWS(StringSplit($line,":")[2], $STR_STRIPLEADING + $STR_STRIPTRAILING) & @CRLF)
        ; No point in searching further
        ExitLoop
    EndIf

Next

M23


Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind._______My UDFs:

Spoiler

ArrayMultiColSort ---- Sort arrays on multiple columns
ChooseFileFolder ---- Single and multiple selections from specified path treeview listing
Date_Time_Convert -- Easily convert date/time formats, including the language used
ExtMsgBox --------- A highly customisable replacement for MsgBox
GUIExtender -------- Extend and retract multiple sections within a GUI
GUIFrame ---------- Subdivide GUIs into many adjustable frames
GUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView items
GUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeView
Marquee ----------- Scrolling tickertape GUIs
NoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxes
Notify ------------- Small notifications on the edge of the display
Scrollbars ----------Automatically sized scrollbars with a single command
StringSize ---------- Automatically size controls to fit text
Toast -------------- Small GUIs which pop out of the notification area

 

Share this post


Link to post
Share on other sites
ur

Thanks @Melba23

I have changed the codeblock for writeConfig also as per your logic.

Func readConfig($sFilePath,$intStartCode)

;Usage: MsgBox(0,"Silent",readConfig(@ScriptDir&"\Config.txt","Silbent"))

;$sReplaceText = "Mani Prakash"
;$sFilePath = "C:\Users\KIRUD01\Desktop\Config.txt"
;$intStartCode = "BuildExe"
$arrRetArray = ""
$s = _FileReadToArray($sFilePath, $arrRetArray);Reading text file and saving it to array $s will show status of reading file..
    For $i = 1 To UBound($arrRetArray)-1
        $line = $arrRetArray[$i];retrieves taskengine text line by line
        ;If StringInStr($line, $intStartCode) Then
        If StringInStr(StringStripWS($line, $STR_STRIPALL), $intStartCode & ":") Then
                ConsoleWrite ("Starting point "& $line &  @CRLF)
                return StringStripWS(StringSplit($line,":")[2],$STR_STRIPLEADING + $STR_STRIPTRAILING )
        EndIf
        if $i = UBound($arrRetArray)-1 then return "Not Found"
    Next
EndFunc

Func writeConfig($sFilePath,$intStartCode,$sReplaceText)

;$sReplaceText = "Mani Prakash"
;$sFilePath = "C:\Users\KIRUD01\Desktop\Config.txt"
;$intStartCode = "BuildExe"
$arrRetArray = ""
$s = _FileReadToArray($sFilePath, $arrRetArray);Reading text file and saving it to array $s will show status of reading file..
$intStartingPointFound = 0
    For $i = 1 To UBound($arrRetArray)-1
        $line = $arrRetArray[$i];retrieves taskengine text line by line
        ;If StringInStr($line, $intStartCode) Then
        If StringInStr(StringStripWS($line, $STR_STRIPALL), $intStartCode & ":") Then
                $intStartingPointFound = 1;if found the starting point of the module to copy then set this variable to 1
                ConsoleWrite ("Starting point " &  @CRLF)
                $arrRetArray[$i] = $intStartCode & ": " & $sReplaceText
                ExitLoop
        EndIf
        if $i = UBound($arrRetArray)-1 then ConsoleWrite("Not Found" & @CRLF)
    Next
_FileWriteFromArray ($sFilePath, $arrRetArray,1)

EndFunc

 

Edited by ur

Share this post


Link to post
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

  • Similar Content

    • dadalt95
      By dadalt95
      Hi!
      I want to get the signal in this website:
      https://binary-signal.com/pt/chart/eurusd
      I have tried using _IEBodyReadText  and some _StringBetween. What happens is that the text are being update every tick and _IEBodyReadText doesn't.
      To perform the update I used  _IEAction($oIE, "refresh") but it's not good because the website block me after some time due too many requests..
      Is there any other way to get this text every tick?
      PS: The text I want to get is WAIT, CALL or PUT.
       
      Here is the code:
      global $oIE = _IECreate ('https://binary-signal.com/pt/chart/eurusd', 0, 1 , 1 , 0) Local $sText = _IEBodyReadText($oIE) $result = _StringBetween ( $sText , 'PUTEUR/USD on Binary-signal.com', 'sinal está PRONTA') ;MsgBox ( 0, "asf", $result[0]) $espera=StringInStr($result[0], "WAIT") $compra=StringInStr($result[0], "CALL") $venda=StringInStr($result[0], "PUT") ;MsgBox($MB_SYSTEMMODAL, "", $espera) $n=0 $c=0 Captar() Func Captar() ;_IENavigate($oIE, "https://binary-signal.com/pt/chart/eurusd") ;MsgBox($MB_SYSTEMMODAL, "", $n) Local $sText = _IEBodyReadText($oIE) $result = _StringBetween ( $sText , 'PUTEUR/USD on Binary-signal.com', 'sinal está PRONTA') If (Not $compra=0) And $n=0 Then MsgBox($MB_SYSTEMMODAL, "", "COMPRE") $n=1 $c=$c+1 ;_IEAction($oIE, "refresh") Sleep(60000) Captar() ElseIf (Not $venda=0) And $n=0 Then MsgBox($MB_SYSTEMMODAL, "", "VENDA") $c=$c+1 $n=1 ;_IEAction($oIE, "refresh") ;MsgBox($MB_SYSTEMMODAL, "", $n) Sleep(60000) Captar() ElseIf (Not $venda=0) And $n=1 Then ;MsgBox($MB_SYSTEMMODAL, "", "Esperando próxima rodada") $n=1 ;MsgBox($MB_SYSTEMMODAL, "", $n) ;_IEAction($oIE, "refresh") Sleep(60000) Captar() ElseIf (Not $venda=0) And $n=1 Then ;MsgBox($MB_SYSTEMMODAL, "", "Esperando próxima rodada") $n=1 ;MsgBox($MB_SYSTEMMODAL, "", $n) ;_IEAction($oIE, "refresh") Sleep(60000) Captar() Else ;MsgBox("", "", "ESPERE") $n=0 Sleep(1000) ;_IEAction($oIE, "refresh") Local $sText = _IEBodyReadText($oIE) $result = _StringBetween ( $sText , 'PUTEUR/USD on Binary-signal.com', 'sinal está PRONTA') Captar() EndIf EndFunc  
    • Trisha
      By Trisha
      Hello,
      I Have clicked on save as option to save a file, while doing that I need to rename a file appending with sysdate. I have searched in google find the below one line of code:
      FileMove("C:\somefile.txt", "C:\somefile1.txt"), When I am trying to append with sysdate. It is not happening. Please help me out  with the small issue.
    • lewisg
      By lewisg
      Suddenly a RunWait command has stop working after 2 years of no errors, issues, or problems. The code uses RunWait to start Plink.exe, a command-line remote connection tool similar to UNIX ssh. I'm using it to ssh to a linux (Centos) machine, run a Perl script, and redirect the output to a file on a PC running the AutoIt script.  
       
      $FilePath = "C:\AutoIT\LED" $FilePathPlus = $FilePath & "\plink.exe" $Code1 = RunWait(@ComSpec & " /c " & $FilePathPlus & " -ssh -l root -pw ?????? 10.170.4.163 /usr/local/nagios/etc/led.pl > C:\AutoIT\LED\led.txt ", @SW_SHOW) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : @ComSpec & " /c " & $FilePathPlus & " -ssh -l root -pw ????? 10.170.4.163 /usr/local/nagios/etc/led.pl > C:\AutoIT\LED\led.txt " = ' & @ComSpec & " /c " & $FilePathPlus & " -ssh -l root -pw ?????? 10.170.4.163 /usr/local/nagios/etc/led.pl > C:\AutoIT\LED\led.txt " & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console The ConsoleWrite output when cut-n-pasted into a DOS box produces the expected file so I know it works. I've also tried many variations of the function moving, adding, and changing the " and ' (quote) marks. Also tried it without the @ComSpec macro and other related functions...e.g.  ShellExecuteWait , etc.
      The PC is a Windows 10 64bit and AutoIT is version 3.3.14.2.
      Searching here and Google has not yielded any clues that helped. 
    • xEviiLx
      By xEviiLx
      I'm trying to read value of a base pointer + offset.
      With only address I can easily the value but with base addres (pointer) I really don't know how I can do that.
       
    • rudi
      By rudi
      Hello.
      I'm too stupid to see my mistake:
      To investigate the internal "dictionary" of TIFF files I'd like to read in the files in binary mode and to check, if there are more than one pages "in" this TIFF.
      Notepad++, "View as Hex" is presenting the first bytes as "49 49 2a 20 08 20 20 20 12" for the TIF attached to this posting
      The "TIFF Header Format" is easy:
      Offset 00h, 2 Byte = Byte Order, "II"=intel, "MM"=motorola. (I = 0x49)
      --> II
      Offset 02h, 2 Byte = Version Nr.
      Offset 04h, 4 Byte = pointer to first IFD entry
      Description of TIFF header: https://www.awaresystems.be/imaging/tiff/faq.html#q3
       

      Howto read and analyse the binary content correctly? This is my messy, not operational code:
       
      $sampleTiff="H:\daten\tif\11\11\111111.TIF" $h=FileOpen($sampleTiff,16) $content=FileRead($h) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $content = ' & $content & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console FileClose($h) $type=VarGetType($content) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $type = ' & $type & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $ToString=BinaryToString($content) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $ToString = ' & $ToString & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console ConsoleWrite(@CRLF & @CRLF) $content=StringTrimLeft($content,2) ; cut off the leading "0x" ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $content = ' & $content & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console for $i = 1 to 8 step 8 $next=StringMid($content,$i,2) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $next = ' & $next & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console $Chr=BinaryToString($next) ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $Chr = ' & $Chr & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console ConsoleWrite(@CRLF & "---" & @CRLF) Next Regards, Rudi.
      111111.TIF
×