Что нового

Редактирование текстовика исходя из его названия

maxd2007

Новичок
Сообщения
89
Репутация
0
Версия AutoIt: 3.3.6

Описание:
Помогите сделать такой скрипт (если это возможно конечно), нужно чтобы скрипт искал в папке текстовики с расширением .map и вносил в них изменения исходя из названия этого текстовика, например: есть фаил R-35-107-A-v,g.map его содержимое:
OziExplorer Map Data File Version 2.2
Р-35-107-А-в,г.ozf2
C:\OziExplorer\Maps\250\P35\Р-35-107-А-в,г.ozf2
а скрипт исправит его на:
OziExplorer Map Data File Version 2.2
R-35-107-A-v,g.ozf2
C:\OziExplorer\Maps\250\P35\R-35-107-A-v,g.ozf2
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
C:\OziExplorer\Maps\250\P35
а вот эта часть постоянная?
И в файле 3 строчки всегда?
 
Автор
M

maxd2007

Новичок
Сообщения
89
Репутация
0
Путь не постоянный, но положить по этому пути все фаилы *.map не проблема
Фаилов *.map несколько тысяч (все лежат в одной папке), содержимое отличается, вот ссылка на 2 таких:
https://yadi.sk/d/TukvxuhHbuNLC
Строчек в среднем 50-60, количество может варьировать.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Сложность в том, что не известно что искать для замены.
Как вариант, смотрим 2 строчку в файле, там обычно что-то такое: Р-35-107-Б-в,г.ozf2, значит ищем это по всему файлу и меняем на Р-35-107-b-v,g.ozf2

Такой алгоритм подойдет?
 
Автор
M

maxd2007

Новичок
Сообщения
89
Репутация
0
Такой алгоритм пойдет если генерация Р-35-107-b-v,g.ozf2 осуществляется из Р-35-107-b-v,g.map, т.е. скрипт ищет в папке текстовик с расширением *.map, предположим Р-35-107-b-v,g.map, берет в буфер только название (без расширения), смотрит в нем вторую строчку (которая всегда является тем, что надо заменить), находит все такие названия и заменяет их на Р-35-107-b-v,g с расширением .ozf2.
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
Код:
$hSearch = FileFindFirstFile('*.map')
If $hSearch = -1 Then
	Exit MsgBox(0, 0, 'Нет файлов map')
EndIf

While 1
	$sFileName = FileFindNextFile($hSearch)
	If @error Then ExitLoop

	;содержимое второй строчки, его будем менять по всему файлу
	$secondline = FileReadLine($sFileName, 2)

	;Проверим вторую строчку
	If Not StringInStr($secondline, '.ozf2') Then
		MsgBox(0, 0, $sFileName & @CRLF & 'вторая строчка не заканчивается на .ozf2' & @CRLF & 'пропуск')
		ContinueLoop
	EndIf

	;заменим .map на .ozf2
	$name = StringRegExpReplace($sFileName, '\.map$', '.ozf2')

;~ 	;считываем старое содержимое
	$content = FileRead($sFileName)

	;Ищем и заменяем
	$newContent = StringReplace($content, $secondline, $name)

;~ 	;записываем новое
	$filehandle = FileOpen($sFileName, 2)
	FileWrite($filehandle, $newContent)
	FileClose($filehandle)
WEnd

MsgBox(0,0,"Готово")

Вот так, скорость будет не большая.


Добавлено:
Сообщение автоматически объединено:

Сделайте бэкап на всякий случай
 
Автор
M

maxd2007

Новичок
Сообщения
89
Репутация
0
:shok: Невероятно, все работает и с первого раза :laugh:. Спасибо большое.


Добавлено:
Сообщение автоматически объединено:

Извиняюсь за глупый вопрос, а как поставить плюс в репу? Или у новичков эта функция ограничена до определенного количества постов?
 
Верх