Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/50: Рейтинг темы: голосов - 50, средняя оценка - 5.00
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2

Hex редактирование - замена строк в файле

28.04.2012, 16:27. Показов 9500. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть файл (вернее 3d модель) в котором нужно сменить имя текстуры, при помощи Free Hex Editor Neo это можно спокойной делать:

грузите файлы на форум



 Комментарий модератора 
Для вложений используйте встроенные возможности форума: кнопка Расширенный режим->Управление вложениями внизу окна редактирования сообщения, или в окне редактирования нажмите на скрепку.
Правила
2.11. Картинки загружайте на форум, во избежание их удаления или потери на сторонних ресурсах.
Картинки можно вставлять в любое место поста: для этого нужно в это место установить курсор, нажать на скрепку и выбрать картинку из выпадающего списка.


Но таких файлов очень много. Поэтому вопрос можно ли сделать программу которая автоматизированно сама заменяла нужные строки?
Например все "act_arm_perchatka.models" заменить на "act_arm_perchatk1.models". Заметьте что символ "a" заменился на "1", символ "1" не добавлялся после "a".

Заране спасибо!

З.Ы.:Прикрепил файл на всякий случай, запакован в .rar архив.
Вложения
Тип файла: rar wpn_abakan_hud.rar (420.9 Кб, 55 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2012, 16:27
Ответы с готовыми решениями:

Поиск и замена hex значения в dll файле
Как мне найти и заменить несколько hex значений в dll файле?

Редактирование hex значений в файле
Всем привет. Не знаю как сделать то что на 2 скриншотах. На 1 до, на втором - после. В какую сторону копать? А то руками замучился...

Поиск и замена hex значения в dll файле
Как мне найти и заменить несколько hex значений в dll файле?

15
return (true);
 Аватар для mimicria
1977 / 1112 / 221
Регистрация: 19.04.2011
Сообщений: 2,346
29.04.2012, 06:21
Непонятно, при чем тут Hex-редактирование
1. Открыть файл
2. Найти последовательность байт
3. Заменить нужный
4. Закрыть файл
5. Повторять п.1-4 для всех файлов
1
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
29.04.2012, 07:47  [ТС]
mimicria, Просто я подумал раз программа Hex Editor то и редактирование должно быть hex.
А можно поподробней? Хотя бы небольшой пример кода, пожалуйста.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
29.04.2012, 14:41
Корректно загрузить содержимое файла
1
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
29.04.2012, 21:55  [ТС]
mimicria, LK, Всё вроде замечательно спасибо за код, только загружает долго конечно. Но не эта проблема самая важная.
mimicria, после твоего кода вставил вот такие строк, для замены wpn\wpn_vog в Memo1 на wpn\wpn_vo1
C++
1
2
3
4
5
6
7
 AnsiString var="wpn\wpn_vog";
 
 while(int i=Memo1->Text.Pos(var))
   {
     Memo1->Text = Memo1->Text.Delete(i,var.Length());
     Memo1->Text = Memo1->Text.Insert("wpn\wpn_vo1",i);
   }
Но ничего не сработало, ничего не извинилось. Что не так сделал?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.04.2012, 22:21
Цитата Сообщение от X_Starter_X Посмотреть сообщение
Что не так сделал?
-на бэкслэше сэкономили (два же нужно..)
C++
1
2
3
4
5
6
      AnsiString var="wpn\\wpn_vog";
      while(int i=Memo1->Text.Pos(var))
   {
         Memo1->Text = Memo1->Text.Delete(i,var.Length());
         Memo1->Text = Memo1->Text.Insert("wpn\\wpn_vo1",i);
   }
1
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
29.04.2012, 23:02  [ТС]
nick42, Ухты действительно помогло. Я думал два бэкслеша только в пути прописывают.
Теперь глупый вопрос как это дело сохранить? Пробовал FileClose и FileSave но вроде не в ту сторону шагаю.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.04.2012, 23:06
если имеется в виду текст в мэмо, то несложно:
C++
1
Memo1->Lines->SaveToFile("file.ext");
1
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
29.04.2012, 23:09  [ТС]
nick42, Ну да обратно сохранить с изменением. Всего лишь имя текстуры сменили.
0
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
29.04.2012, 23:31  [ТС]
Что-то не то, 3d редактор матерится не хочет грузить. Кстати я заметил что чуть чуть не так загружается: вместо пробелов появляются буквы "я".
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
29.04.2012, 23:35
а файлы сложной структуры в блокноте править нельзя, - он только на тексты рассчитан (как и мэмо). Я считаю, что лучше использовать FStream и бинарный буфер; если заменяемый фрагмент одной длины с заменяющим, то трудностей вообще минимум.
0
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
29.04.2012, 23:44  [ТС]
Так и есть длина одинакова, иначе вылет движка, поэтому просто приходится заменять последний символ.
"FStream и бинарный буфер" можно поподробней?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
30.04.2012, 00:17
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void __fastcall TForm1::Button2Click(TObject *Sender)
{
       int fl = FileOpen(".\\wpn_abakan_hud.ogf",fmOpenReadWrite);
       UINT dlf = FileSeek(fl,0,2);
       UCHAR *dbuf = new UCHAR[dlf+1];
       FileSeek(fl,0,0);
       int dlf2 = FileRead(fl,dbuf,dlf);
     {  /*  ìàíèïóëÿöèè ïî ïîèñêó è çàìåíå  */  }
       if (FileSeek(fl,0,0)>=0)
          FileWrite(fl,dbuf,dlf);
       FileClose(fl);
       delete dbuf;
 
       Memo1->Lines->Add(IntToStr(dlf2)) ;
}
1
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
30.04.2012, 13:27  [ТС]
nick42, Посоветовали немного изменить код так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    void __fastcall TForm1::Button2Click(TObject *Sender)
if (OpenDialog1->Execute()) {
           int fl = FileOpen(OpenDialog1->FileName,fmOpenReadWrite);
           UINT dlf = FileSeek(fl,0,2);
           char *dbuf = new char[dlf+1];
           char *s = "act_arm_perchatka";
           char *ps = dbuf;
           FileSeek(fl,0,0);
           int dlf2 = FileRead(fl,dbuf,dlf);
           while ((ps = strstr(ps, s)) != NULL) {
           Memo1->Lines->Add("Проверка, внутри while ли мы вообще?");
                *(ps+16) = '1';
                ps++;
           }
           if (FileSeek(fl,0,0)>=0)
              FileWrite(fl,dbuf,dlf);
           FileClose(fl);
           delete dbuf;
 
           Memo1->Lines->Add(IntToStr(dlf2)) ;
    }
    }
Я так понял редактируется сам исходник. И уже ничего сохранять не нужно. Но в исходнике изменения не произошли. Судя по проверке внутрь в while так и не заходит, т. к. в Memo1 не выдаёт строку "Проверка, внутри while ли мы вообще?".

Добавлено через 34 минуты
Нашёл ошибку осталось решить: dbuf принимает значение '\0' 0 (0x00), а ведь это структура файла и значение хоть как должно быть длинное и большое.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
30.04.2012, 14:32
no comments...
Вы можете написать цикл последовательного сравнения буфера dbuf со всеми символами строки в Edit1 и в случае полного совпадения - замена найденного фрагмента (в dbuf) с соответствующими символами из строки Edit2 ?
0
11 / 11 / 1
Регистрация: 01.12.2011
Сообщений: 162
Записей в блоге: 2
30.04.2012, 17:41  [ТС]
Сработало!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
        void __fastcall TForm1::Button2Click(TObject *Sender)
        {
               int fl = FileOpen(".\\wpn_abakan_hud.ogf",fmOpenReadWrite);
               UINT dlf = FileSeek(fl,0,2);
               char *dbuf = new char[dlf+1]; // указатель на ANSI-строку длиной dif+1
               char *s = "act_arm_perchatka"; // ANSI-строка которую необходимо найти
               FileSeek(fl,0,0);
               int dlf2 = FileRead(fl,dbuf,dlf);
               int len = strlen(s);
               for (int i=0; i<dlf; i++) {
                    if (dbuf[i] == s[0]) {
                        for (int j=1; j<len && (i+j)<dlf; j++) {
                            if (dbuf[i+j] != s[j])
                                break;
                            else if (j == len-1)
                                dbuf[i+j] = '1';
                        }
                    }
               }
               if (FileSeek(fl,0,0)>=0)
                  FileWrite(fl,dbuf,dlf);
               FileClose(fl);
               delete[] dbuf;
 
               Memo1->Lines->Add(IntToStr(dlf2)) ;
        }
Всем большое спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.04.2012, 17:41
Помогаю со студенческими работами здесь

Редактирование строк в txt файле
Здравствуйте. Имеется программа, которая считывает построчно текстовый файл, и заменяет в нём одну конкретную строку, на другую. Проблема в...

Редактирование строк в одном файле и перезапись их в другой
Помогите, пожалуйста, с заданием. Задание: «Составляющее текстового файла f, поделенное на строки, переписать в текстовый файл g,...

Работа с файлами. Удаление и редактирование строк в бинарном файле
Имеется вот такое задание: Дан файл, содержащий сведения о вступительных экзаменах в ВУЗ по результатам ЕГЭ по математике, русскому и...

Замена строк в файле
Добрый день! Я новичок, только что зарегистрировался на форуме. Помогите пожалуйста решить такую задачу: Есть текстовый файл....

Замена строк в файле
Здравствуйте. Помогите плз. Есть скрипт который собирает маки и ложит в файл. Файл получается такой: spawn ssh 10.41.120.53^M ^M ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru