|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переименование строк |
|
CMD/BAT - [решено] Переименование строк
|
Новый участник Сообщения: 5 |
Извиняюсь за банальность вопроса, но появилась такая вот задача:
Есть файл с данными в формате txt, к каждому "id" присвоено значение, в моём случае описания различных штуковин. В оригинальном файле: В роли "id" выступают строки - от STRING 3 до STRING 2788 Нужно их заменить на - от STRING 468 до STRING 3262 Так как ручками делать это довольно долго, решил обратиться к cmd, но особо не понял как в нём работать. Полученный скрипт : (да, это всё что я понял) FINDSTR STRING... C:\Users\User\Desktop\items.wts Дальше просто не знаю как записать: К результату каждого поиска прибавлять по 465 и перезаписывать в файл. Откуда расхождение в 8 цифр, буду выяснять, видимо что-то упущено. |
|
Отправлено: 14:44, 15-02-2018 |
Ветеран Сообщения: 1274
|
Профиль | Отправить PM | Цитировать NightSiren,
очень желательно знать что в STRING, можно ли считать STRING N шаблоном а что в дальнейшем будет с этими строками, может проще сделать код, который меняет выходную строку перед выполнением действия над ней команда STRING N+465 (ну это если намечаются какие-то действия, а не просто перезапись, но для чего-то и она нужна ведь) |
Отправлено: 15:31, 15-02-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать NightSiren, Не догоняю. Надо взять строки с 468 по 3262, удалить кусок с 3 по 2788 и вставить, начиная с 3 строки, взятые строки. Иначе непонятно, ведь 2788-3+1=2786<>2795=3262-468+1
Вам что, надо получить в файле 2 одинаковых куска? Или, начиная с 468 строки взять 2786 значений и заменить строки с 3 по 2788 ??? |
------- Отправлено: 15:37, 15-02-2018 | #3 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Смотрите, нужно просто взять и переименовать строки:
STRING 3 --> STRING 468 STRING 4 --> STRING 469 STRING 5 --> STRING 470 .... STRING 2788 --> STRING 3253 После того как найду, куда делись 8 строк, запущу скрипт ещё раз. Я не знаю как это должно быть реализовано, но я выложил свои мысли по этому поводу. Может есть способ сделать это легче. |
Отправлено: 19:04, 15-02-2018 | #4 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать vbs-скрипт
Txt = "Z:\Box_In\Эпидерсия.txt" N1 = 3 N2 = 2788 M1 = 468 M2 = 3262 Set FSO = CreateObject("Scripting.FileSystemObject") On Error Resume Next Set inFile = FSO.OpenTextFile(Txt, 1) If Err.Number <> 0 Then MsgBox Txt + vbCrLf + Err.Description WScript.Quit 1 End If On Error GoTo 0 AllTxt = inFile.ReadAll inFile.Close Mas = Split(AllTxt, vbCrLf) UMas = UBound(Mas) LMas = LBound(Mas) For i = N1 To N2 If i + LMas - 1 <= M2 - LMas And i + LMas - 1 <= UMas Then Mas(i + LMas - 1) = Mas(i + LMas - 1 + M1 - N1) End If Next On Error Resume Next Set inFile = FSO.OpenTextFile(Txt, 2, True) If Err.Number <> 0 Then MsgBox Txt + vbCrLf + Err.Description WScript.Quit 1 End If On Error GoTo 0 For Each S In Mas inFile.WriteLine S Next inFile.Close |
|
------- Отправлено: 20:51, 15-02-2018 | #5 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать megaloman
Спасибо за скрипт, но он работает немного кривовато: Под строкой я имел ввиду слово STRING, но не номер строки. Сам файл выглядит вот так: file.png |
Отправлено: 22:22, 15-02-2018 | #6 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать Ладно, спасибо за помощь, найден другой способ это сделать (занять друга на 6 часов за небольшую сумму)
|
Отправлено: 22:39, 15-02-2018 | #7 |
Ветеран Сообщения: 2728
|
Профиль | Отправить PM | Цитировать NightSiren,
Oм мани падме хум! Мне Ваших денег не жалко, напрягает, что кто-то сделает мартышкин труд. Вот вариант после Вашего уточнения постановки
Txt = "Z:\Box_In\Эпидерсия2.txt" N1 = 3 N2 = 2788 M1 = 468 Set FSO = CreateObject("Scripting.FileSystemObject") On Error Resume Next Set inFile = FSO.OpenTextFile(Txt, 1) If Err.Number <> 0 Then MsgBox Txt + vbCrLf + Err.Description WScript.Quit 1 End If On Error GoTo 0 AllTxt = inFile.ReadAll inFile.Close Mas = Split(AllTxt, vbCrLf) UMas = UBound(Mas) LMas = LBound(Mas) i1 = N1 For k = LMas To UMas i = InStr(1, Mas(k), "STRING") If i > 0 Then Mas2 = Split(Mas(k), " ") If i1 = CInt(Mas2(LMas + 1)) Then Mas(k) = "STRING " + CStr(i1 + M1 - N1) i1 = i1 + 1 If i1 > N2 Then Exit For End If End If Next On Error Resume Next Set inFile = FSO.CreateTextFile(Txt, True) If Err.Number <> 0 Then MsgBox Txt + vbCrLf + Err.Description WScript.Quit 1 End If On Error GoTo 0 For Each s In Mas inFile.WriteLine s Next inFile.Close |
------- Отправлено: 00:53, 16-02-2018 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Удаление пустых строк, пробелов и/или конца строк | blackeangel | Скриптовые языки администрирования Windows | 12 | 11-03-2016 21:49 | |
Переименование файлов | B1010 | Видео и аудио: обработка и кодирование | 0 | 28-09-2014 11:38 | |
Разное - переименование папки | Drec555 | Microsoft Windows 7 | 3 | 26-02-2013 18:49 | |
CMD/BAT - Поиск слова в тексте, удаление строки, удаление 8 строк выше и 3 строк ниже | Alk-13 | Скриптовые языки администрирования Windows | 0 | 10-02-2012 18:06 | |
Переименование домена | skif_anapster | Microsoft Windows NT/2000/2003 | 1 | 25-09-2006 16:52 |
|