Sign in to follow this  
Followers 0
jbennett

Read delimiters from .ini file

13 posts in this topic

Hi,

I have a quick question...

I have an .ini file that has a piece of data that I would look to read but it doesn't seem to be working.

I have a feeling that it's due to the delimiters in the data, is there any way of reading this data into the code.

[TEST]
days=1,2,3,4

I know how to read ini files, just not with delimiters. Thanks

Share this post


Link to post
Share on other sites



What exactly does it return? IniRead() should return a string so afaik delimiters shouldn't be a problem but if you show some example output as well as the sample ini it might help.

Share this post


Link to post
Share on other sites

Hi,

Thanks for that.

The only problem I have is that it works in a msgbox but not in this code

Do you have any ideas why?

Note - I have only pasted a little piece of the code here...

$scheduled_backup_days = IniRead(@scriptdir & "\Configuration.ini", "SCHEDULE_CONFIG", "scheduled_backup_days","")

$read_scheduled_backup_days=stringsplit($scheduled_backup_days,",")
for $i = 1 to $read_scheduled_backup_days[0]
next

    Switch @WDAY    
    case $read_scheduled_backup_days

Share this post


Link to post
Share on other sites

$scheduled_backup_days = IniRead(@scriptdir & "\Configuration.ini", "SCHEDULE_CONFIG", "scheduled_backup_days","")

$read_scheduled_backup_days=stringsplit($scheduled_backup_days,",")
for $i = 1 to $read_scheduled_backup_days[0]
next
    Switch @WDAY    
    case $read_scheduled_backup_days
Why is 'Next' before the content of the loop?

Your reference to the array requires an index, like: case $read_scheduled_backup_days[$i]

The string split and loop are not required anyway. Just do:

If StringInStr($scheduled_backup_days, @WDAY) Then
; ...do something
EndIf

:P


Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

hmm now i'm confused.

Normally I would have..

Switch @WDAY    
    case 3

which then continues to run some code if it's Tuesday. But I want to be able to define the day(s) in an .ini file.

Ofcourse if there is more than 1 day then it doesn't read the .ini as the .ini would then display 2,3 for example.

thanks

EDIT

===

The code below works but I can only have one number in the .ini

e.g

[sCHEDULE_CONFIG]

scheduled_backup_days=2

$scheduled_backup_days = IniRead(@scriptdir & "\Configuration.ini", "SCHEDULE_CONFIG", "scheduled_backup_days","")

Switch @WDAY    
    case $scheduled_backup_days
Edited by jbennett

Share this post


Link to post
Share on other sites

#7 ·  Posted (edited)

hmm now i'm confused.

Normally I would have..

Switch @WDAY    
    case 3

which then continues to run some code if it's Tuesday. But I want to be able to define the day(s) in an .ini file.

Ofcourse if there is more than 1 day then it doesn't read the .ini as the .ini would then display 2,3 for example.

thanks

I'm not sure where you are getting lost?

The following reads the INI:

$scheduled_backup_days = IniRead(@scriptdir & "\Configuration.ini", "SCHEDULE_CONFIG", "scheduled_backup_days","")
So $scheduled_backup_days now = "1,2,3,4".

Then you check if @WDAY is in that list:

If StringInStr($scheduled_backup_days, @WDAY) Then
     ; ...do something
EndIf

Switch/Case is not required, as far as I can tell.

:P

Edited by PsaltyDS

Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law

Share this post


Link to post
Share on other sites

#8 ·  Posted (edited)

I need to keep the switch/case.

All i'm struggling with is

case 'something'

where 'something' is read from the .ini, whether thats 2,3 or just 2 etc

thanks

EDIT

---

the code does work, but only with 1 number in the .ini. (Refer to post #6)

Edited by jbennett

Share this post


Link to post
Share on other sites

#9 ·  Posted (edited)

I need to keep the switch/case.

All i'm struggling with is

case 'something'

where 'something' is read from the .ini, whether thats 2,3 or just 2 etc

thanks

EDIT

---

the code does work, but only with 1 number in the .ini. (Refer to post #6)

Then you can change it from Switch/Case to Select/Case, and use it like this:
$scheduled_backup_days = IniRead(@scriptdir & "\Configuration.ini", "SCHEDULE_CONFIG", "scheduled_backup_days","")
If StringInStr($scheduled_backup_days, @WDAY) Then
    Select
        Case StringInStr($scheduled_backup_days, "1")
    ; Do something if Sunday is in the list
    
        Case StringInStr($scheduled_backup_days, "2")
    ; Do something if Monday is in the list

        Case StringInStr($scheduled_backup_days, "3")
    ; Do something if Tuesday is in the list
    EndSelect
EndIf

Note that with either Switch/Case or Select/Case, it will siop processing when it gets a match and not check the rest of the Cases. Is that really what you wanted?

:P

Edit: Added check for @WDAY first.

Edited by PsaltyDS

Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law

Share this post


Link to post
Share on other sites

#10 ·  Posted (edited)

Note that with either Switch/Case or Select/Case, it will siop processing when it gets a match and not check the rest of the Cases. Is that really what you wanted?

Yep I want it to stop processing.

The only problem I have is that ideally I wanted to keep the numbers within 1 case.

For instance with my code at the moment if I put "Case 1,2,3" then if it's one of these days it will run the code. I didn't want to split up the days

Main reason is because I don't want to define the numbers in the code.

thanks

EDIT

-----

Maybe I could try something like

Case StringInStr($scheduled_backup_days, "1","2","3","4","5","6","7")

run CODE A

Case StringInStr($other_days, "1","2","3","4","5","6","7")

run CODE B

Edited by jbennett

Share this post


Link to post
Share on other sites

#11 ·  Posted (edited)

I've got a better idea, which is....

$scheduled_backup_days = IniRead(@scriptdir & "\Configuration.ini", _ 
"SCHEDULE_CONFIG", "scheduled_backup_days","")

Switch @WDAY    
case $scheduled_backup_days
RUN CODE A

case Else
RUN CODE B
EndSwitch

Then in my .ini I can put in the necessary date any any other dates will just use "case Else"

Just a shame I can't put more days in "case $scheduled_backup_days"

Edited by jbennett

Share this post


Link to post
Share on other sites

I've got a better idea, which is....

$scheduled_backup_days = IniRead(@scriptdir & "\Configuration.ini", _ 
"SCHEDULE_CONFIG", "scheduled_backup_days","")

Switch @WDAY    
case $scheduled_backup_days
RUN CODE A

case Else
RUN CODE B
EndSwitch

Then in my .ini I can put in the necessary date any any other dates will just use "case Else"

Just a shame I can't put more days in "case $scheduled_backup_days"

Now you are confusing me. I don't think that will work because @WDAY is a single digit and will not compare correctly to "1,2,3,4". Also, I don't see how that, if it did work, would be different from this:
$scheduled_backup_days = IniRead(@scriptdir & "\Configuration.ini", _ 
"SCHEDULE_CONFIG", "scheduled_backup_days","")

If StringInStr($scheduled_backup_days, @WDAY) Then
       RUN CODE A
Else
       RUN CODE B
EndIf

:P


Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law

Share this post


Link to post
Share on other sites

#13 ·  Posted (edited)

It's the same idea as you just posted. Mine works :-)

But I can only have 1 day in the .ini file

It's not really a requirement to have more than 1 day set as a schedule but just for my personal knowledge it would have been useful to know how to add this to the code so I can specify more than 1 day to run CODE A

Basically CODE A is a scheduled backup that the user will specify the day in the .ini file.

and CODE B will run the backup on the other days if it has not been run in CODE A (and if reminders are set to YES in the .ini but I don't want to confuse you).

It all works perfectly well, just the fact that I can only set 1 day as a schedule day. Not that it really matters but was just interested to know how.

thanks

EDIT

-----

A very easy way of adding more days would be to just put it in the .ini file

[sCHEDULE]

Schedule1=2

Schedule2=3

Schedule3=4

and then just put

case $scheduled1, $schedule2,$schedule3

If I created a GUI for the .ini then it wouldn't be a big deal to me. Just an idea.

Edited by jbennett

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
Sign in to follow this  
Followers 0