cyanidemonkey Posted December 31, 2005 Share Posted December 31, 2005 I am trying to edit a config file (cfg file below)Say I want to edit maxplayers = 8 (line 24) to 'maxplayers = 12'How do I do this? I've tried FileWrite & FileLineWrite but they add a line at the bottomexpandcollapse popup// DISPLAY video_type = 0 game_res = 4 no_anim = 0 window_size = 1 music_volume = 255 gamma = 128 turbo = 0 // CONTROLS crosshairs = 1 showgun = 1 picinpic = 0 // MULTIPLAYER login_password = "" game_password = "" squad_password = "" game_name = "server test2" phone_number = "and" internet_address = "0.0.0.0" mp_service = 4 mp_gametype = 2 maxplayers = 8 dedicated = 0 com_port = 0 baud_rate = 0 max_team_lives = 100 max_kills = 82 team_req = 0 attributes = 131 startdelay = 0 destroybuild = 1 deathmes = 1 replay = 2 time_limit = 32 koth_limit = 5 timeout = 0 mp_numteams = 2 gpsicon = 1 sp_wind = 0 showtags = 1 contest = 0 // MAP map_infrared = 1 map_iff = 1 map_AWAC = 1 // SYSTEM preempt_pff = 0 whichbrowser = 0 country = "no land" red_password = "" blue_password = "" yellow_password = "" violet_password = "" mp_verbose = 1 My AutoIt Scripts.- AutoHost and Password Enabler for Delta Force 2 Demo.| Caffine for Winamp 2.9x and WRS 2.0 | mp3 directory cleaner | CRAP DJ | A:B:J Radio Automation Software | FFMPEG batch conversion automator Link to comment Share on other sites More sharing options...
Shyke Posted December 31, 2005 Share Posted December 31, 2005 (edited) Use IniRead & IniWrite. Just replace the // to [ and ] and there you have it. EDIT: you may have to change that file a bit more formatting wise though. Edited December 31, 2005 by Shyke Link to comment Share on other sites More sharing options...
cyanidemonkey Posted December 31, 2005 Author Share Posted December 31, 2005 this file is being use by another application and that is how it writes it out, I'd like to be able to control the way it works by editing its config file directly My AutoIt Scripts.- AutoHost and Password Enabler for Delta Force 2 Demo.| Caffine for Winamp 2.9x and WRS 2.0 | mp3 directory cleaner | CRAP DJ | A:B:J Radio Automation Software | FFMPEG batch conversion automator Link to comment Share on other sites More sharing options...
huldu Posted December 31, 2005 Share Posted December 31, 2005 (edited) You could probably change the // to [] like the above poster said. Thats actually the only thing you need to change. However the script would haveto change it back to the way it was. I assume thats a server config for a game and the game wouldnt understand [] i guess. The problem with using IniRead/IniWrite is that you need the [] or it wont find what you are looking for Edited December 31, 2005 by huldu "I'm paper, rock is fine, nerf scissors!!!" Link to comment Share on other sites More sharing options...
cyanidemonkey Posted December 31, 2005 Author Share Posted December 31, 2005 yeah, it's server config for a game. How do I rewrite the // to [] ? I figure I have to open/edit the file first to rewrite the // to [] , then use IniWrite to edit the settings, then switch [] to // My AutoIt Scripts.- AutoHost and Password Enabler for Delta Force 2 Demo.| Caffine for Winamp 2.9x and WRS 2.0 | mp3 directory cleaner | CRAP DJ | A:B:J Radio Automation Software | FFMPEG batch conversion automator Link to comment Share on other sites More sharing options...
huldu Posted December 31, 2005 Share Posted December 31, 2005 You only haveto add a [] at the beginning of the file. For example [GAME], then you have IniWrite do something like this: IniWrite($File, "GAME", "Maxplayers", "12") The thing is i dont know how to make FileWrite change the first line. The config never repeats a variable, which is a good thing... thats why you only need 1 [GAME] at top. "I'm paper, rock is fine, nerf scissors!!!" Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted December 31, 2005 Moderators Share Posted December 31, 2005 Here try this, should at least get you started before someone makes it better: #include <file.au3> $File = FileOpenDialog("FILE TO WORK WITH", @ScriptDir, "ALL (*.*)") Dim $Change = "maxplayers" Dim $Value = 7 ChangeSomething($File, $Change, $Value) Func ChangeSomething(ByRef $FilePath, ByRef $ChangeWhat, $Value) Local $nArray Local $NewFile = @ScriptDir & "/TempTest.txt" _FileReadToArray($FilePath, $nArray) _FileCreate($NewFile) For $i = 1 To UBound($nArray) - 1 If StringInStr($nArray[$i], $ChangeWhat) Then $Split = StringSplit($nArray[$i], '=') $nArray[$i] = StringReplace($nArray[$i], $Split[2], " " & $Value) EndIf FileWriteLine($NewFile, $nArray[$i]) Next FileDelete($FilePath) FileMove($NewFile, $FilePath) EndFunc Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
cyanidemonkey Posted December 31, 2005 Author Share Posted December 31, 2005 Nice one SmOke_N, That works well, cheers My AutoIt Scripts.- AutoHost and Password Enabler for Delta Force 2 Demo.| Caffine for Winamp 2.9x and WRS 2.0 | mp3 directory cleaner | CRAP DJ | A:B:J Radio Automation Software | FFMPEG batch conversion automator Link to comment Share on other sites More sharing options...
cyanidemonkey Posted December 31, 2005 Author Share Posted December 31, 2005 (edited) When I try to call the function I get an error, is there a different way to call functions with refences? GUICtrlCreateLabel ("Maximum Players:", 30,60,90,20) $MaxPlayers = GUICtrlCreateCombo ("", 117,57,40,80) GUICtrlSetData(-1,"1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16", $gMaxPlayers) Dim $Change = "maxplayers" Dim $Value = $MaxPlayers GUICtrlSetOnEvent($MaxPlayers, "ChangeSomething($File, $Change, $Value)" ) Func ChangeSomething(ByRef $FilePath, ByRef $ChangeWhat, $Value) Local $nArray Local $NewFile = @ScriptDir & "/TempTest.txt" _FileReadToArray($FilePath, $nArray) _FileCreate($NewFile) For $i = 1 To UBound($nArray) - 1 If StringInStr($nArray[$i], $ChangeWhat) Then $Split = StringSplit($nArray[$i], '=') $nArray[$i] = StringReplace($nArray[$i], $Split[2], " " & $Value) EndIf FileWriteLine($NewFile, $nArray[$i]) Next FileDelete($FilePath) FileMove($NewFile, $FilePath) EndFunc Edited December 31, 2005 by cyanidemonkey My AutoIt Scripts.- AutoHost and Password Enabler for Delta Force 2 Demo.| Caffine for Winamp 2.9x and WRS 2.0 | mp3 directory cleaner | CRAP DJ | A:B:J Radio Automation Software | FFMPEG batch conversion automator Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted December 31, 2005 Moderators Share Posted December 31, 2005 (edited) Does this work? GUICtrlCreateLabel ("Maximum Players:", 30,60,90,20) $MaxPlayers = GUICtrlCreateCombo ("", 117,57,40,80) GUICtrlSetData(-1,"1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|16", $gMaxPlayers) GUICtrlSetOnEvent($MaxPlayers, "CallChanges") Func CallChanges() Local $File = 'FilePath' Local $Change = 'maxplayers' Local $Value = GUICtrlRead($MaxPlayers) ChangeSomething($File, $Change, $Value) EndFunc Func ChangeSomething(ByRef $FilePath, ByRef $ChangeWhat, $Value) Local $nArray Local $NewFile = @ScriptDir & "/TempTest.txt" _FileReadToArray($FilePath, $nArray) _FileCreate($NewFile) For $i = 1 To UBound($nArray) - 1 If StringInStr($nArray[$i], $ChangeWhat) Then $Split = StringSplit($nArray[$i], '=') $nArray[$i] = StringReplace($nArray[$i], $Split[2], " " & $Value) EndIf FileWriteLine($NewFile, $nArray[$i]) Next FileDelete($FilePath) FileMove($NewFile, $FilePath) EndFunc Edit: I'm assuming your only showing partial code (I hope so anyway)... Don't forget you need #inlude <File.au3> Edited December 31, 2005 by SmOke_N Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
cyanidemonkey Posted January 1, 2006 Author Share Posted January 1, 2006 Yes that works, thanks Smoke NAnd yeah, I had just dropped in the snippet of code before, the includes and stuff are @ the top of my script.Cheers for your help. Now it's going for one control I need to get it to update maybe half the lines in the config file, each from a different control in the GUI.Would it be better to put a GUICtrlSetOnEvent on each of the controls or would all the opening/copying/rewritng/deleting/moving of the file on every event change be a problem and maybe I should run the function once and update all options from all controls at the same time triggerd by a single event? My AutoIt Scripts.- AutoHost and Password Enabler for Delta Force 2 Demo.| Caffine for Winamp 2.9x and WRS 2.0 | mp3 directory cleaner | CRAP DJ | A:B:J Radio Automation Software | FFMPEG batch conversion automator Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted January 1, 2006 Moderators Share Posted January 1, 2006 I'm not a fan of GUICtrlSetOnEvent, I'd rather just use: $msg = GUIGetMsg() and a case statement. Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
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