Jump to content

Property file reading issue


ur
 Share

Recommended Posts

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

 

Link to comment
Share on other sites

  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

  • Moderators

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

Public_Domain.png.2d871819fcb9957cf44f4514551a2935.png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind

Open spoiler to see 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

 

Link to comment
Share on other sites

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