Показать полную графическую версию : [решено] Функция для добавления текста в файл с учётом нумерации, на примере Scenery.cfg
twister777
03-12-2010, 06:58
Добрый день.
Многие энтузиасты Flight Simulator X часто сталкиваются с потребностью добавлять новые текстовые записи
в конфигурационный файл симулятора.
Помогите пожалуйста с функцией для скрипта автоматической установки сценариев.
Вся работа производится на чистом энтузиазме, и ваша помощь действительно сэкономит время многим людям.
Задача:
Есть готовый текстовый файл по пути c:\Users\All Users\Microsoft\FSX\
с именем Scenery.CFG
Имеет структуру:
[General]
Title=FS9 World Scenery
Description=FS9 Scenery Data
Clean_on_Exit=TRUE
[Area.001]
Title=Default Terrain
Local=Scenery\World
Texture_ID=1
Layer=1
Active=TRUE
Required=TRUE
[Area.002]
Title=Default Scenery
Local=Scenery\BASE
Layer=2
Active=TRUE
Required=TRUE
..... СОКРАТИМ ДЛЯ УДОБСТВА
[Area.127]
Title=Menorca X Ground
Local=Aerosoft\Menorca X Ground
Active=TRUE
Layer=124
Required=FALSE
[Area.128]
Title=Menorca X SC
Local=Aerosoft\Menorca X SC
Active=TRUE
Layer=125
Required=FALSE
Функции передается строка Title (название)и строка Local(относительный путь к папке).
Функция сама находит максимальное значение числа в строчках Area и Layer (по всему файлу),
после чего увеличивает Area на еденицу и Layer на еденицу.
Записывает результирующий кусочек текста в конец файла.
Результатом ее работы должно стать добавление такого кусочка текста в исходный файл c примером:
[Area.129]
Title=Ibiza X Ground
Local=Aerosoft\Ibiza X Ground
Active=TRUE
Layer=126
Required=FALSE
Собственно всё.
Заранее спасибо за потраченное вами время и участие.
Так ? :
;$sFilePath="c:\Users\All Users\Microsoft\FSX\Scenery.CFG"
$sFilePath=@ScriptDir & "\1.txt"
$sText=FileRead($sFilePath)
MsgBox(0,'$sText',$sText)
$sPattern="(?s).+(\[.+?)"
$sFind=StringRegExpReplace($sText,$sPattern,"\1")
$sPattern="(.+[=.])(.+)"
$aFind=StringRegExp($sFind,$sPattern,3)
$sRet=''
For $i=0 To UBound($aFind)-2 Step 2
If $i=0 Or $i=8 Then $aFind[$i+1]+=1
If $i=0 Then $aFind[$i+1]&= "]"
$sRet&= $aFind[$i] & $aFind[$i+1] & @LF
Next
ConsoleWrite($sRet & @LF)
$hFile=FileOpen($sFilePath,1)
FileWrite($hFile,$sRet)
FileClose($hFile)
twister777
03-12-2010, 13:31
Я не очень разбираюсь в синтаксисе AutoIt...
А где здесь переменная в которую задавать
Title=Ibiza X Ground
Local=Aerosoft\Ibiza X Ground
и их вывод в результирующий файл.
и где вывод вот таких строчек
Active=TRUE
Required=FALSE
?
madmasles
03-12-2010, 13:46
twister777,
Как я понял, файл Scenery.CFG имеет структуру ini-файла. Тогда можно так попробовать:Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)('MustDeclareVars', 1)
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sLocalNew = 'Aerosoft\Ibiza X Ground' ;новый Local
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sTitleNew = 'Island of Ibiza' ;новый Title
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sFile = @ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptdir) & '\Scenery.CFG';поменяйте на нужный Вам полный путь к файлу
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sRes
$sRes = _AddNewSection($sLocalNew, $sTitleNew, $sFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, 'Error', 'Error')
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'OK', 'Add new section: [Area.' & @extended (http://www.autoitscript.com/autoit3/docs/macros.htm#@extended) & ']' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'with new Layer: ' & $sRes)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _AddNewSection($sLocal, $sTitle, $sFileCFG)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hFile, $aSectionNames, $iTempSectionNumber, $iTempLayerNumber, $iNumberSectionMax = 0, _
$iNumberLayerMax = 0
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sNewSection = 'Area.'
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sComment = @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & ';Next section add ' & @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@mday) & '.' & @MON (http://www.autoitscript.com/autoit3/docs/macros.htm#@mon) & '.' & @YEAR (http://www.autoitscript.com/autoit3/docs/macros.htm#@year) & ' ' & _
@HOUR (http://www.autoitscript.com/autoit3/docs/macros.htm#@hour) & ':' & @MIN (http://www.autoitscript.com/autoit3/docs/macros.htm#@min)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aNewData[5][2] = [['Title', $sTitle],['Local', $sLocal],['Active', 'TRUE'], _
['Layer'],['Required', 'FALSE']]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) FileExists (http://www.autoitscript.com/autoit3/docs/functions/FileExists.htm)($sFileCFG) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $sTitle Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
$hFile = FileOpen (http://www.autoitscript.com/autoit3/docs/functions/FileOpen.htm)($sFileCFG, 1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $hFile = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) FileWrite (http://www.autoitscript.com/autoit3/docs/functions/FileWrite.htm)($hFile, $sComment) = 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
FileClose (http://www.autoitscript.com/autoit3/docs/functions/FileClose.htm)($hFile)
$aSectionNames = IniReadSectionNames (http://www.autoitscript.com/autoit3/docs/functions/IniReadSectionNames.htm)($sFileCFG)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aSectionNames[0]
$iTempSectionNumber = Number (http://www.autoitscript.com/autoit3/docs/functions/Number.htm)(StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aSectionNames[$i], '[^0-9]', ''))
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iTempSectionNumber > $iNumberSectionMax Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iNumberSectionMax = $iTempSectionNumber
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$iTempLayerNumber = Number (http://www.autoitscript.com/autoit3/docs/functions/Number.htm)(IniRead (http://www.autoitscript.com/autoit3/docs/functions/IniRead.htm)($sFileCFG, $aSectionNames[$i], $aNewData[3][0], 0))
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iTempLayerNumber > $iNumberLayerMax Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iNumberLayerMax = $iTempLayerNumber
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
$iNumberLayerMax = $iNumberLayerMax + 1
$iNumberSectionMax = StringFormat (http://www.autoitscript.com/autoit3/docs/functions/StringFormat.htm)('%03d', $iNumberSectionMax + 1)
$sNewSection = $sNewSection & $iNumberSectionMax
$aNewData[3][1] = $iNumberLayerMax
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) IniWriteSection (http://www.autoitscript.com/autoit3/docs/functions/IniWriteSection.htm)($sFileCFG, $sNewSection, $aNewData, 0) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(0, $iNumberSectionMax, $iNumberLayerMax)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_AddNewSection
twister777
03-12-2010, 14:22
madmasles,
Да, это похоже на ini-файл.
Вот это, мне кажется, то, что нужно, жаль я сейчас на работе - нет возможности скомпилировать и проверить работоспособность (((
Я хочу уточнить.
-------------------------------------------------------------------
при выводе:
[Area.129] ; числовое значение меняется, а все буквы и скобки неизменны
Title=Ibiza X Ground ; 'Title=' неизменные символы , 'Ibiza X Ground' задаётся в Global
Local=Aerosoft\Ibiza X Ground ; символы после знака равно это путь, он НИКАК не связан с Title, он должен задаваться в Global,а вашем варианте они связаны
Active=TRUE ; эта строчка всегда неизменна
Layer=126 ; числовое значение меняется, а все буквы и '=' неизменны
Required=FALSE ; эта строчка всегда неизменна
-----------------------------------------------------------------------------------------------
P.S. Я даже не ожидал, что так быстро найдётся почти готовое решение, спасибо.
Я не очень разбираюсь в синтаксисе AutoIt...
А где здесь переменная в которую задавать
Title=Ibiza X Ground
Local=Aerosoft\Ibiza X Ground
и их вывод в результирующий файл.
и где вывод вот таких строчек
Active=TRUE
Required=FALSE »
;Тогда так для наглядности :
#include<Array.au3>
;$sFilePath="c:\Users\All Users\Microsoft\FSX\Scenery.CFG"
$sFilePath=@ScriptDir & "\1.txt"
;Чтение всего файла
$sText=FileRead($sFilePath)
MsgBox(0,'$sText',$sText)
; Получение текста последней ячейки (имеется ввиду , что последняя ячейка и есть Max)
$sPattern="(?s).+(\[.+?)"
$sFind=StringRegExpReplace($sText,$sPattern,"\1")
MsgBox(0,'$sFind',$sFind)
ConsoleWrite("Найденный текст ячейки : " & @LF & $sFind & @LF)
; Получение массива всех строк последней ячейки
$sPattern="(.+[=.])(.+)"
$aFind=StringRegExp($sFind,$sPattern,3)
_ArrayDisplay($aFind,'$aFind')
; Получение нового текста ячейки
$sRet=''
For $i=0 To UBound($aFind)-2 Step 2
If $i=0 Or $i=8 Then $aFind[$i+1]+=1 ; Увеличение числа для строк 1 и 5 в ячейке
If $i=0 Then $aFind[$i+1]&= "]"; Добавление "]" к строке 1 ячейки
; Остальные значения строк не меняются ( остаются прежними)
$sRet &= $aFind[$i] & $aFind[$i+1] & @LF ; объединение элементов массива в строку текста
Next
MsgBox(0,'$sRet',$sRet) : Записываемый текст
ConsoleWrite("Нновый текст ячейки : " & @LF & $sRet & @LF)
; Запись нового текста ячейки в конец файла
$hFile=FileOpen($sFilePath,1)
FileWrite($hFile,$sRet)
FileClose($hFile)
twister777
03-12-2010, 15:12
gregaz,
Строчка вывода 2 и 3 должна где-то задаваться - там прописываются пути и названия, они разные, в этом смысл автоматизации.
http://forum.oszone.net/post-1557491-5.html
Вам тоже спасибо за вариант решения.
После 20.00 МСК попробую оба варианта дома на практике.
madmasles
03-12-2010, 15:25
[Area.129] ; числовое значение меняется, а все буквы и скобки неизменны
Title=Ibiza X Ground ; 'Title=' неизменные символы , 'Ibiza X Ground' задаётся в Global »Да.
Active=TRUE ; эта строчка всегда неизменна
Layer=126 ; числовое значение меняется, а все буквы и '=' неизменны
Required=FALSE ; эта строчка всегда неизменна »Да.
Local=Aerosoft\Ibiza X Ground ; символы после знака равно это путь, он НИКАК не связан с Title, он должен задаваться в Global,а вашем варианте они связаны »Здесь мне не совсем понятно.
Title=Ibiza X Ground связаны или нет с Local=Aerosoft\Ibiza X Ground?
Путь к файлу Scenery.CFG и его имя постоянны или нет?
twister777
03-12-2010, 16:00
madmasles,
Путь к файлу Scenery.CFG и его имя постоянны или нет?
Постоянный путь и постоянное имя файла.
Title=Ibiza X Ground связаны или нет с Local=Aerosoft\Ibiza X Ground?
Не связаны. Просто так совпало на примере, сорри.
Нужно в функцию передать Title= (например 'Island of Ibiza') и передать путь к сценарию Local= (например 'Aerosoft\Ibiza X Ground')
----------------------------------------------------------------------------------------------------
функция, скорее всего, будет вызываться несколько раз последовательно (будут добавляться несколько разных итоговых секций за один запуск главного скрипта)
madmasles
03-12-2010, 18:47
twister777,
Если я все правильно понял, то сейчас функция должна работать как надо. Я код в своем посте поправил. Можно еще с окном типа #include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <GUIConstantsEx.au3>
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <StaticConstants.au3>
#include (http://www.autoitscript.com/autoit3/docs/keywords.htm##include) <WindowsConstants.au3>
Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)('TrayMenuMode', 1)
$sFile = @ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptdir) & '\Scenery.CFG'
#region ### START Koda GUI section ### Form=
$hGui = GUICreate (http://www.autoitscript.com/autoit3/docs/functions/GUICreate.htm)('Редактор Scenery.CFG', 300, 205, -1, -1)
GUICtrlCreateLabel (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateLabel.htm)('Введите Title', 10, 5, 280, 17, $SS_CENTER)
GUICtrlCreateLabel (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateLabel.htm)('Введите Local', 10, 50, 280, 17, $SS_CENTER)
GUICtrlCreateLabel (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateLabel.htm)('Путь к файлу Scenery.CFG', 10, 95, 280, 17, $SS_CENTER)
$LabelResult = GUICtrlCreateLabel (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateLabel.htm)('', 0, 185, 300, 20)
$InputTitle = GUICtrlCreateInput (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateInput.htm)('', 10, 25, 280, 20)
$InputLocal = GUICtrlCreateInput (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateInput.htm)('', 10, 70, 280, 20)
$InputCFG = GUICtrlCreateInput (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateInput.htm)($sFile, 10, 115, 280, 20)
$ButtonGo = GUICtrlCreateButton (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateButton.htm)('Редактировать', 40, 145, 90, 30)
$ButtonOpen = GUICtrlCreateButton (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlCreateButton.htm)('Открыть', 170, 145, 90, 30)
GUISetState (http://www.autoitscript.com/autoit3/docs/functions/GUISetState.htm)()
#endregion ### END Koda GUI section ###
While (http://www.autoitscript.com/autoit3/docs/keywords.htm#While) 1
$nMsg = GUIGetMsg (http://www.autoitscript.com/autoit3/docs/functions/GUIGetMsg.htm)()
Switch (http://www.autoitscript.com/autoit3/docs/keywords.htm#Switch) $nMsg
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $GUI_EVENT_CLOSE
Exit (http://www.autoitscript.com/autoit3/docs/keywords.htm#Exit)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $ButtonOpen
$sFile = GUICtrlRead (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlRead.htm)($InputCFG)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) FileExists (http://www.autoitscript.com/autoit3/docs/functions/FileExists.htm)($sFile) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
Run (http://www.autoitscript.com/autoit3/docs/functions/Run.htm)('NotePad ' & $sFile)
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
GUICtrlSetData (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm)($LabelResult, 'ERROR: Файл не найден.')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Case (http://www.autoitscript.com/autoit3/docs/keywords.htm#Case) $ButtonGo
$sTitleNew = GUICtrlRead (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlRead.htm)($InputTitle)
$sLocalNew = GUICtrlRead (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlRead.htm)($InputLocal)
$sFile = GUICtrlRead (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlRead.htm)($InputCFG)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $sTitleNew Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $sLocalNew Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $sFile Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
GUICtrlSetData (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm)($LabelResult, 'Вы ввели не все данные.')
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
$sRes = _AddNewSection($sLocalNew, $sTitleNew, $sFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
GUICtrlSetData (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm)($LabelResult, 'OK: Новая секция: [Area.' & @extended (http://www.autoitscript.com/autoit3/docs/macros.htm#@extended) & ']' _
& 'с новым Layer: ' & $sRes)
GUICtrlSetData (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm)($InputTitle, '')
GUICtrlSetData (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm)($InputLocal, '')
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
GUICtrlSetData (http://www.autoitscript.com/autoit3/docs/functions/GUICtrlSetData.htm)($LabelResult, 'ERROR: Произошла ошибка редактирования.')
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
EndSwitch (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndSwitch)
WEnd (http://www.autoitscript.com/autoit3/docs/keywords.htm#WEnd)
;тут функцию _AddNewSection($sLocal, $sTitle, $sFileCFG) добавить.
twister777
03-12-2010, 22:10
madmasles,
Проверил, функция работает отлично.
Если не сложно, поправьте мою ошибку - сейчас перепроверил структуру недоглядел.
При выводе строчку Layer выводить после Local, затем Active, затем Required
[Area.129]
Title=Ibiza X Ground
Local=Aerosoft\Ibiza X Ground
Layer=126
Active=TRUE
Required=FALSE
Огромное вам спасибо!!!!
Если интересно будет что-нибудь по теме симуляторов - смело пишите: williamfoxtrot[@]gmail[dot]com
madmasles
03-12-2010, 22:33
twister777,
Поправил:Opt (http://www.autoitscript.com/autoit3/docs/functions/Opt.htm)('MustDeclareVars', 1)
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sLocalNew = 'Aerosoft\Ibiza X Ground' ;новый Local
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sTitleNew = 'Island of Ibiza' ;новый Title
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sFile = @ScriptDir (http://www.autoitscript.com/autoit3/docs/macros.htm#@scriptdir) & '\Scenery.CFG';поменяйте на нужный Вам полный путь к файлу
Global (http://www.autoitscript.com/autoit3/docs/keywords.htm#Global) $sRes
$sRes = _AddNewSection($sLocalNew, $sTitleNew, $sFile)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(16, 'Error', 'Error')
Else (http://www.autoitscript.com/autoit3/docs/keywords.htm#Else)
MsgBox (http://www.autoitscript.com/autoit3/docs/functions/MsgBox.htm)(64, 'OK', 'Add new section: [Area.' & @extended (http://www.autoitscript.com/autoit3/docs/macros.htm#@extended) & ']' & @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & _
'with new Layer: ' & $sRes)
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Func (http://www.autoitscript.com/autoit3/docs/keywords.htm#Func) _AddNewSection($sLocal, $sTitle, $sFileCFG)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $hFile, $aSectionNames, $iTempSectionNumber, $iTempLayerNumber, $iNumberSectionMax = 0, _
$iNumberLayerMax = 0
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sNewSection = 'Area.'
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $sComment = @CRLF (http://www.autoitscript.com/autoit3/docs/macros.htm#@crlf) & ';Next section add ' & @MDAY (http://www.autoitscript.com/autoit3/docs/macros.htm#@mday) & '.' & @MON (http://www.autoitscript.com/autoit3/docs/macros.htm#@mon) & '.' & @YEAR (http://www.autoitscript.com/autoit3/docs/macros.htm#@year) & ' ' & _
@HOUR (http://www.autoitscript.com/autoit3/docs/macros.htm#@hour) & ':' & @MIN (http://www.autoitscript.com/autoit3/docs/macros.htm#@min)
Local (http://www.autoitscript.com/autoit3/docs/keywords.htm#Local) $aNewData[5][2] = [['Title', $sTitle],['Local', $sLocal],['Layer'], _
['Active', 'TRUE'],['Required', 'FALSE']]
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) FileExists (http://www.autoitscript.com/autoit3/docs/functions/FileExists.htm)($sFileCFG) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $sTitle Or (http://www.autoitscript.com/autoit3/docs/keywords.htm#Or) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) $sLocal Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
$hFile = FileOpen (http://www.autoitscript.com/autoit3/docs/functions/FileOpen.htm)($sFileCFG, 1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $hFile = -1 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) FileWrite (http://www.autoitscript.com/autoit3/docs/functions/FileWrite.htm)($hFile, $sComment) = 0 Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
FileClose (http://www.autoitscript.com/autoit3/docs/functions/FileClose.htm)($hFile)
$aSectionNames = IniReadSectionNames (http://www.autoitscript.com/autoit3/docs/functions/IniReadSectionNames.htm)($sFileCFG)
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) @error (http://www.autoitscript.com/autoit3/docs/macros.htm#@error) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
For (http://www.autoitscript.com/autoit3/docs/keywords.htm#For) $i = 1 To (http://www.autoitscript.com/autoit3/docs/keywords.htm#To) $aSectionNames[0]
$iTempSectionNumber = Number (http://www.autoitscript.com/autoit3/docs/functions/Number.htm)(StringRegExpReplace (http://www.autoitscript.com/autoit3/docs/functions/StringRegExpReplace.htm)($aSectionNames[$i], '[^0-9]', ''))
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iTempSectionNumber > $iNumberSectionMax Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iNumberSectionMax = $iTempSectionNumber
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
$iTempLayerNumber = Number (http://www.autoitscript.com/autoit3/docs/functions/Number.htm)(IniRead (http://www.autoitscript.com/autoit3/docs/functions/IniRead.htm)($sFileCFG, $aSectionNames[$i], $aNewData[2][0], 0))
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) $iTempLayerNumber > $iNumberLayerMax Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then)
$iNumberLayerMax = $iTempLayerNumber
EndIf (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndIf)
Next (http://www.autoitscript.com/autoit3/docs/keywords.htm#Next)
$iNumberLayerMax = $iNumberLayerMax + 1
$iNumberSectionMax = StringFormat (http://www.autoitscript.com/autoit3/docs/functions/StringFormat.htm)('%03d', $iNumberSectionMax + 1)
$sNewSection = $sNewSection & $iNumberSectionMax
$aNewData[2][1] = $iNumberLayerMax
If (http://www.autoitscript.com/autoit3/docs/keywords.htm#If) Not (http://www.autoitscript.com/autoit3/docs/keywords.htm#Not) IniWriteSection (http://www.autoitscript.com/autoit3/docs/functions/IniWriteSection.htm)($sFileCFG, $sNewSection, $aNewData, 0) Then (http://www.autoitscript.com/autoit3/docs/keywords.htm#Then) Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(1)
Return (http://www.autoitscript.com/autoit3/docs/keywords.htm#Return) SetError (http://www.autoitscript.com/autoit3/docs/functions/SetError.htm)(0, $iNumberSectionMax, $iNumberLayerMax)
EndFunc (http://www.autoitscript.com/autoit3/docs/keywords.htm#EndFunc) ;==>_AddNewSection
Есть нюанс. Если нет ни одной секции [Area.***], то будет добавлена секция [Area.001] и значение Layer=1. Можно это значение изменить. Можно, наверное, еще задать какие-то условия на проверку валидности Title и Local.
twister777
04-12-2010, 04:56
madmasles,
Не стоит. Area.001 по Area.120 уже есть с самого начала установки симулятора.
Это стандартные сценарии.
Мы добавляем хорошие, красивые - просто разработчикам очень часто не хватает квалификации написать
утилитку для их регистрации.
просто разработчикам очень часто не хватает квалификации »
это шутка такая? разработчикам очень продвинутого симулятора не хватает квалификации добавить несколько строк в текстовый файл?
если я конечно правильно понял, и под разработчиками имелось в виду именно разработчики симулятора, а не чего бы то ни было еще
twister777
04-12-2010, 09:25
kaster,
FSX - это большой конструктор.
Разные разработчики из разных стран используя FSX SDK пишут дополнения.
Сценарии, летательные аппараты. Кто-то на коммерческой основе, кто-то нет.
И многим таки не хватает рук написать такой патчер, хотя скажем в фотосценариях они разбираются неплохо.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC