|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Сравнение файлов и замена значения из одного файла в другой. |
|
|
CMD/BAT - [решено] Сравнение файлов и замена значения из одного файла в другой.
|
Новый участник Сообщения: 8 |
Профиль | Отправить PM | Цитировать Добрый день, обращаюсь к знающим людям в области программирования, вручную конечно можно но там около 10000 значений надо будет копипастить.
Нужно в файле 1.txt заменить значение 76868238 значением из 2.txt 76561198037133966, следовательно значение 9818504 заменить на 76561197970084232 и т.д. |
|
Отправлено: 10:37, 23-08-2012 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Первое значение в 1.txt первым со 2.txt и т.д.
76868238 на 76561198037133966 9818504 на 76561197970084232 В первом файле значение которое надо заменить находится через каждые 47 строк , во втором через две. |
Отправлено: 19:27, 23-08-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 6
|
Aleks911tat
Лучше один раз увидеть... небольшой пример того, что должно получиться и уж тогда может быть... |
Отправлено: 18:34, 24-08-2012 | #3 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:20, 24-08-2012 | #4 |
Новый участник Сообщения: 6
|
Попробуйте вот это на VBS:
Option Explicit Dim fso, vStreamSrc1, vStreamSrc2, vStreamDest Dim strLine1, strLine2, strSrc1, strSrc2 Const FILE_SRC1 = "R:\1.txt" 'что менять Const FILE_SRC2 = "R:\2.txt" 'откуда брать замену Const FILE_DEST = "R:\3.txt" 'куда сохранить Function Between(strWhereSearch, strLeftString, strRightString) Dim pos1, pos2 pos1 = InStr(1, strWhereSearch, strLeftString, vbTextCompare) If pos1 Then pos2 = InStr(pos1 + 1, strWhereSearch, strRightString, vbTextCompare) If pos2 Then Between = Mid(strWhereSearch, pos1 + 1, pos2 - pos1 - 1) Exit Function End If End If Between = "" End Function Set fso = CreateObject("Scripting.FileSystemObject") Set vStreamSrc1 = fso.OpenTextFile(FILE_SRC1, 1, False, 0) Set vStreamSrc2 = fso.OpenTextFile(FILE_SRC2, 1, False, 0) Set vStreamDest = fso.OpenTextFile(FILE_DEST, 2, True, 0) While Not vStreamSrc1.AtEndOfStream strLine1 = vStreamSrc1.ReadLine strSrc1 = Between(strLine1, "[", " StatsObject]") If strSrc1 <> "" Then strSrc2 = "" While (Not vStreamSrc2.AtEndOfStream) And (strSrc2 = "") strLine2 = vStreamSrc2.ReadLine strSrc2 = Between(strLine2, "[", "]") Wend If strSrc2 <> "" Then vStreamDest.WriteLine Replace(strLine1, strSrc1, strSrc2, 1, 1, vbTextCompare) Else vStreamDest.WriteLine strLine1 End If Else vStreamDest.WriteLine strLine1 End If Wend vStreamSrc1.Close vStreamSrc2.Close vStreamDest.Close MsgBox "OK" |
|
Отправлено: 08:38, 25-08-2012 | #5 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Значения не перенеслись
|
Отправлено: 10:47, 25-08-2012 | #6 |
Новый участник Сообщения: 6
|
|
Отправлено: 13:28, 25-08-2012 | #7 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Совсем забыл про не стандартную кодировку, поменял.
Появилась проблема, если во 2.txt в следующей строке после значения которое надо перенести в 1.txt есть квадратные скобки [] [76561198016708202] GALL[M.P.A.D.]=SRVetDemolitions то значение не переносится [n StatsObject] PlayerName=GALL[M.P.A.D.] дальше он копирует неправильно. |
Последний раз редактировалось Aleks911tat, 25-08-2012 в 15:17. Причина: Появились новые ошибки. Отправлено: 14:27, 25-08-2012 | #8 |
Ветеран Сообщения: 2726
|
Профиль | Отправить PM | Цитировать Aleks911tat, Вот вариант решения
File1 = "D:\_Удали это\1.txt" File2 = "D:\_Удали это\2.txt" File3 = "D:\_Удали это\1new.txt" WordKey = " StatsObject]" Set FSO = CreateObject("Scripting.FileSystemObject") Set F = FSO.OpenTextFile(File2, 1, False) ' Открываем исходный текст файл для чтения AllTxt = F.ReadAll() ' Cчитываем весь файл в строковую переменную F.Close ' Закрываем файл Mas = Split(AllTxt, vbCrLf) ' Разбиваем полученную строку в массив. Резделитель - конец строки и перевод строки vbCrLf i0 = 0 ii = UBound(Mas) Set F = FSO.OpenTextFile(File1, 1, False) ' Открываем исходный текст файл для чтения Set FF = FSO.OpenTextFile(File3, 2, True) ' Создаём файл для записи результата A = "" wk = LCase(WordKey) j = 0 Do While Not F.AtEndOfStream InString = Trim(F.ReadLine) If i0 <= ii Then If Mid(InString, 1, 1) = "[" Then If InStr(LCase(InString), wk) <> 0 Then For i = i0 To ii MM = Trim(Mas(i)) j = i If Mid(MM, 1, 1) = "[" Then InString = Replace(MM, "]", WordKey) Exit For End If Next i0 = j + 1 End If End If End If FF.Write A + InString A = vbCrLf Loop F.Close FF.Close |
------- Последний раз редактировалось megaloman, 25-08-2012 в 21:16. Отправлено: 17:57, 25-08-2012 | #9 |
Новый участник Сообщения: 8
|
Профиль | Отправить PM | Цитировать Скрипт из файла 2.txt берет значение и заменяет по три значения в 1.txt, первое значение перенес правильно , а остальное нет.
|
Отправлено: 18:40, 25-08-2012 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Замена прав файла и владельца при перемещении файла в другой каталог. W2K3R2 | GreenIce | Microsoft Windows NT/2000/2003 | 18 | 30-10-2011 18:16 | |
CMD/BAT - [решено] поиск и сравнение оригинального и резервной копии (.bak) одного и того же файла | takoff | Скриптовые языки администрирования Windows | 4 | 11-10-2011 07:32 | |
Разное - [решено] PHP - Передача полезного значения(части) массива из одного скрипта php, в другой. | ilka | Программирование и базы данных | 8 | 02-11-2010 19:37 | |
Разное - Преобразование одного формата файла в другой | Evgesha_572 | Программирование и базы данных | 3 | 04-02-2009 14:57 |
|