Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Функция для добавления текста в файл с учётом нумерации, на примере Scenery.cfg

Ответить
Настройки темы
[решено] Функция для добавления текста в файл с учётом нумерации, на примере Scenery.cfg

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день.

Многие энтузиасты 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
Собственно всё.
Заранее спасибо за потраченное вами время и участие.

Отправлено: 06:58, 03-12-2010

 

Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 22:10, 03-12-2010 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для madmasles

Ветеран


Сообщения: 812
Благодарности: 353

Профиль | Отправить PM | Цитировать


twister777,
Поправил:
читать дальше »
Код: Выделить весь код
Opt('MustDeclareVars', 1)

Global $sLocalNew = 'Aerosoft\Ibiza X Ground' ;новый Local
Global $sTitleNew = 'Island of Ibiza' ;новый Title
Global $sFile = @ScriptDir & '\Scenery.CFG';поменяйте на нужный Вам полный путь к файлу
Global $sRes
$sRes = _AddNewSection($sLocalNew, $sTitleNew, $sFile)
If @error Then
    MsgBox(16, 'Error', 'Error')
Else
    MsgBox(64, 'OK', 'Add new section: [Area.' & @extended & ']' & @CRLF & _
            'with new Layer: ' & $sRes)
EndIf

Func _AddNewSection($sLocal, $sTitle, $sFileCFG)
    Local $hFile, $aSectionNames, $iTempSectionNumber, $iTempLayerNumber, $iNumberSectionMax = 0, _
            $iNumberLayerMax = 0
    Local $sNewSection = 'Area.'
    Local $sComment = @CRLF & ';Next section add ' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & _
            @HOUR & ':' & @MIN
    Local $aNewData[5][2] = [['Title', $sTitle],['Local', $sLocal],['Layer'], _
            ['Active', 'TRUE'],['Required', 'FALSE']]
    If Not FileExists($sFileCFG) Then Return SetError(1)
    If Not $sTitle Or Not $sLocal Then Return SetError(1)
    $hFile = FileOpen($sFileCFG, 1)
    If $hFile = -1 Then Return SetError(1)
    If FileWrite($hFile, $sComment) = 0 Then Return SetError(1)
    FileClose($hFile)
    $aSectionNames = IniReadSectionNames($sFileCFG)
    If @error Then Return SetError(1)
    For $i = 1 To $aSectionNames[0]
        $iTempSectionNumber = Number(StringRegExpReplace($aSectionNames[$i], '[^0-9]', ''))
        If $iTempSectionNumber > $iNumberSectionMax Then
            $iNumberSectionMax = $iTempSectionNumber
        EndIf
        $iTempLayerNumber = Number(IniRead($sFileCFG, $aSectionNames[$i], $aNewData[2][0], 0))
        If $iTempLayerNumber > $iNumberLayerMax Then
            $iNumberLayerMax = $iTempLayerNumber
        EndIf
    Next
    $iNumberLayerMax = $iNumberLayerMax + 1
    $iNumberSectionMax = StringFormat('%03d', $iNumberSectionMax + 1)
    $sNewSection = $sNewSection & $iNumberSectionMax
    $aNewData[2][1] = $iNumberLayerMax
    If Not IniWriteSection($sFileCFG, $sNewSection, $aNewData, 0) Then Return SetError(1)
    Return SetError(0, $iNumberSectionMax, $iNumberLayerMax)
EndFunc   ;==>_AddNewSection

Есть нюанс. Если нет ни одной секции [Area.***], то будет добавлена секция [Area.001] и значение Layer=1. Можно это значение изменить. Можно, наверное, еще задать какие-то условия на проверку валидности Title и Local.

Последний раз редактировалось madmasles, 06-12-2010 в 10:02.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:33, 03-12-2010 | #12


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


madmasles,
Не стоит. Area.001 по Area.120 уже есть с самого начала установки симулятора.
Это стандартные сценарии.
Мы добавляем хорошие, красивые - просто разработчикам очень часто не хватает квалификации написать
утилитку для их регистрации.

Последний раз редактировалось twister777, 04-12-2010 в 05:10.


Отправлено: 04:56, 04-12-2010 | #13


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Цитата twister777:
просто разработчикам очень часто не хватает квалификации »
это шутка такая? разработчикам очень продвинутого симулятора не хватает квалификации добавить несколько строк в текстовый файл?
если я конечно правильно понял, и под разработчиками имелось в виду именно разработчики симулятора, а не чего бы то ни было еще

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 05:29, 04-12-2010 | #14


Новый участник


Сообщения: 8
Благодарности: 0

Профиль | Отправить PM | Цитировать


kaster,
читать дальше »
FSX - это большой конструктор.
Разные разработчики из разных стран используя FSX SDK пишут дополнения.
Сценарии, летательные аппараты. Кто-то на коммерческой основе, кто-то нет.
И многим таки не хватает рук написать такой патчер, хотя скажем в фотосценариях они разбираются неплохо.

Отправлено: 09:25, 04-12-2010 | #15



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Функция для добавления текста в файл с учётом нумерации, на примере Scenery.cfg

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
OpenOffice Writer, Проблемы с выводом нумерации страниц. steppe Программное обеспечение Linux и FreeBSD 1 03-04-2013 13:18
2003/XP/2000 - [решено] сбилась функция автоматического удаления выделенного текста клавишей BackSpace myohoji Microsoft Office (Word, Excel, Outlook и т.д.) 3 19-11-2012 18:57
добавления строк в файл e9990638 Автоматическая установка приложений 5 18-01-2007 18:35
Расширение памяти DOS / config.cfg excimer1 Автоматическая установка Windows 2000/XP/2003 2 12-08-2005 15:46




 
Переход