Перейти к содержанию

[tools] SimbolFix - Проверка текста на ошибки для Fallout 1 & 2.


Slack64

Рекомендуемые сообщения

Спасибо всем за советы и замечания, я пересмотрел алгоритмы

проверки на некоторые правила и в данный момент занялся переделкой,

прошу подождать несколько дней.

Ссылка на комментарий

Движок не опознает символ #-комментария

 

я всегда знал что если стоит # то после неё можно писать всё что угодно

и это не должно влиять на работу программы, но оказалось,

что даже в строке которая без нодов и начинается сначала,

если поставить скобку в любом месте, то error !?

#

# { это строка комментария

#

получается что движок не понимает строк с комментариями, а просто тупо

ищет скобки и если не шаблон, то error, но тогда мне непонятно следующее,

сделал такой вариант

#{150}{}{Вы видите СЛОНА.}

{150}{}{Вы видите Освальда.}

 

в игре вывелась строка - Вы видите Освальда, а почему не СЛОНА если движку # по фигу,

скобки ведь есть и всё по шаблону и правильно

 

второй вариант

{150}{}{Вы видите СЛОНА.}

{150}{}{Вы видите Освальда.}

 

опять вывелось - Вы видите Освальда, это как движок понял что Освальд не СЛОН,

может это СЛОНА так зовут - Освальд,

номер ведь одинаковый и Освальд идёт второй строкой

 

вариант три

{150}{}{Вы видите Освальда.}

#{150}{}{Вы видите СЛОНА.}

 

а вот здесь мы получаем сообщение - Вы видите СЛОНА

получается что если номер идентичен, то выводится вторая строка

и не важно что перед ней стоит #

 

просто чудеса .... )

Ссылка на комментарий

Опишу тебе алгоритм проверки без regex, посредством for

Читаем файл в массив символов и с помощью for проходится по каждому символу массива.

Если в массиве встретился символ '{', увеличиваем переменную OpenCurve, - указывая что нашли открывающую скобку.

Далее в проходе по символам если встречается '}' уменьшаем OpenCurve, и увеличиваем CloseCurve - указывая что группа скоб закрылась.

Но если в процессе проверки встречается опять '{'  вместо требуемой '}' увеличиваем OpenCurve и уменьшаем OpenCurve.

Тут цель этих переменных CloseCurve и OpenCurve, показать, что если в процессе прохода по символам их значение превысит число 1, то структура скоб в файле нарушена.

 

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

 

for (int offset = 0; offset < len; offset++) { // len - длина файла (количество символов)
     char ch = TextContent[offset]; //ch - здесь проверяемый символ из массива.
     if (ch == '{') {
          openCurve++;      //увеличиваем
          if (closeCurve > 0)
                closeCurve--; // уменьшаем

     } else if (ch == '}') {
          closeCurve++;
          openCurve--;
     }
     // проверяем переменные
     if (closeCurve > 1) {
          errorOpenCurve = true;
          break; // ошибка выход
     }
     if (openCurve > 1) {
          errorCloseCurve = true;
          break; // ошибка выход
     }
}

 

 

Ссылка на комментарий

Опишу тебе алгоритм проверки без regex, посредством for

спасибо, посмотрю на вариант в цикле,

но в принципе я разобрался с регексами и крышками, и потихоньку переделываю скрипт,

со скобками за комментом уже всё сделал, теперь не важно где стоит # в начале,

в середине, в конце, главное что если за ней будет скобка, выведется сообщение,

проверяю в сроках

# {

{100}{}{} # {

{100}{pc}{текст # {

{100}{}{текст # {

на присутствие, есть ли та, или другая /\{|\}/

моя ошибка была том,что я изначально пошёл не правильным путём,

потому что пропустил твоё замечание по работе движка,

да ещё не понятно зачем наделал лишних правил,

убрал лишнее и у меня уже скрипт сократился раза в три,

теперь надо поправить проверку на основную триаду

 

такой момент, Перл он сам по себе заточен для по стройной обработки

и одно дело пробежать сразу по всей строке и переход на следующую,

другое дело перебирать каждую строку в цикле, скорость выполнения уменьшится,

понятно  что на Си цикл будет быстрее обрабатываться, но я Си не знаю

в регексах есть правило проверки на присутствие в строке

N-го кол-ва символов, то есть мы ведь знаем сколько должно быть

тех и других скобок в строке, но что-то у меня с этим вариантом не получилось

Ссылка на комментарий

я всегда знал что если стоит # то после неё можно писать всё что угодно

и это не должно влиять на работу программы, но оказалось,

что даже в строке которая без нодов и начинается сначала,

если поставить скобку в любом месте, то error !?

#

# { это строка комментария

#

получается что движок не понимает строк с комментариями, а просто тупо

ищет скобки и если не шаблон, то error, но тогда мне непонятно следующее,

сделал такой вариант

#{150}{}{Вы видите СЛОНА.}

{150}{}{Вы видите Освальда.}

 

в игре вывелась строка - Вы видите Освальда, а почему не СЛОНА если движку # по фигу,

скобки ведь есть и всё по шаблону и правильно

 

второй вариант

{150}{}{Вы видите СЛОНА.}

{150}{}{Вы видите Освальда.}

 

опять вывелось - Вы видите Освальда, это как движок понял что Освальд не СЛОН,

может это СЛОНА так зовут - Освальд,

номер ведь одинаковый и Освальд идёт второй строкой

 

вариант три

{150}{}{Вы видите Освальда.}

#{150}{}{Вы видите СЛОНА.}

 

а вот здесь мы получаем сообщение - Вы видите СЛОНА

получается что если номер идентичен, то выводится вторая строка

и не важно что перед ней стоит #

 

просто чудеса .... )

По ссылке, что я дал, ровно это и написано, английским по белому.

FO2tweaks: неограниченные напарники, запрет напарникам стрельбы очередями, улучшенные гранаты итп.
Переводы: Fallout Fixt svg-badge.svg, Restoration Project svg-badge.svg, Dangerous Quest! svg-badge.svg

Инструменты: расширение VScode с поддержкой скриптов Fallout.

Информация: документация к sfall, вики по Fallout: Nevada, вики PlayItHardcore.

Если есть вопросы, в личку не пишите, лучше пишите на форум.

Ссылка на комментарий

По ссылке, что я дал, ровно это и написано, английским по белому.

да, спасибо, но я Вам ответил ранее что питона не знаю,

поэтому не стал просматривать весь листинг, зачем так сразу - английским по белому,

да и к тому же я англ. не знаю

я вроде не писал что знаю как и могу это сделать на 100%, просто решил попробовать,

но не обещал что всё получится,

да и соревноваться в программировании не планировал,

потому что у меня в этом вопросе знаний чуть больше 0

Ссылка на комментарий

если у кого найдётся время, проверте пожалуйста, не пропустил ли я ещё что-то

список вариантов скобок на ошибки по триаде

 

 

 

 
{700}{}{верно}#
{701}{}{ верно}#

702{}{не верно}#
{703{}{не верно}#

{704}{{не верно}#
{705}}{не верно}#

{706 }{}{не верно#
{ 707}{}{не верно}#

{708}{}{{не верно}#
{709}{}}{не верно}#

{710}}{}{не верно}#
{{711}{}{не верно}#

{712}{{}{не верно}#
{713}{}{не верно}}#

{714}{}{не верно#

{715}{}{не } верно}#
{716}{}{не { верно}#

{717}{17}{верно}#
{718}{ok}{верно}#

{719}19}{не верно}#
{729}{20{не верно}#

{721}{ 21}{не верно}#

{722}{}{}#верно

{723}{}{}{#не верно
{724}{}{}}#не верно

725}{}{}#не верно
{726{}{}#не верно

{727}}{}#не верно
{728}{{}#не верно

{729}{}}#не верно
{730}{}{#не верно

{731}{#не верно
{732}}#не верно
{733}#не верно
 

 

 

 

на данный момент я уже сделал, что всё перечисленное

без проблем ловится одним коротким правилом по регексам

Ссылка на комментарий
такой момент, Перл он сам по себе заточен для по стройной обработки

и одно дело пробежать сразу по всей строке и переход на следующую,

другое дело перебирать каждую строку в цикле, скорость выполнения уменьшится,

не может быть чтобы перл не работал с массивом символов - видимо просто не совсем хорошо знаешь язык.

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

Ссылка на комментарий

не может быть чтобы перл не работал с массивом символов - видимо просто не совсем хорошо знаешь язык.

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

так я уже несколько раз писал, что знаний и опыта мало,

работает Перл и с массивом, и с хешем, rк примеру можно сделать

шаблон а затем сравнение по элементам, но это надо же делать )

кстати, ты мне писал про \w+ так вот это не работает с русскими буквами,

не важно в какой кодировке, я проверял, да и в доке об этом написано

 

забыл спросить, а что насчёт пробела, к примеру { 100} или {100}{ 10}

error или по фигу, и можно не проверять на такое

 

насчёт быстроты, я на днях Squid 4.0.2 компилил,

так он у меня на железке 2 CPU по 8 ядер, собирался 20 минут,

интересно, а на одно-ядерном атоме кальмар наверно несколько часов

будет собираться, если вообще соберётся )

Ссылка на комментарий

> забыл спросить, а что насчёт пробела, к примеру { 100} или {100}{ 10}
Если в скобке с номером будет пробел начальный/конечный то будет вылет. Для остальных пофиг.

Ссылка на комментарий

Спасибо, всё понял, у меня уже почти всё получилось, остался один вопросик,

так как у тебя большой опыт по игре, подскажи какие символы используются

в диалоговом тексте кроме этих, которые мне попадались в тексте,

через пробел чтобы понятно было

 

. , ! ? ' " [ ] - = ! :

 

что нужно их этого, или могут все из этих присутствовать

 

< > $ % ^ & * ( ) | \  / ;  @

Ссылка на комментарий

Ссылку на вики я имел ввиду.

Вообще, отдельный скрипт для проверки это неплохо, но, мне кажется, мало востребовано. Если бы в какой-то редактор встроено, это другое дело.

В тексте могут присутствовать вообще любые символы.

FO2tweaks: неограниченные напарники, запрет напарникам стрельбы очередями, улучшенные гранаты итп.
Переводы: Fallout Fixt svg-badge.svg, Restoration Project svg-badge.svg, Dangerous Quest! svg-badge.svg

Инструменты: расширение VScode с поддержкой скриптов Fallout.

Информация: документация к sfall, вики по Fallout: Nevada, вики PlayItHardcore.

Если есть вопросы, в личку не пишите, лучше пишите на форум.

Ссылка на комментарий

Ссылку на вики я имел ввиду.

Вообще, отдельный скрипт для проверки это неплохо, но, мне кажется, мало востребовано. Если бы в какой-то редактор встроено, это другое дело.

В тексте могут присутствовать вообще любые символы.

кроме скобок ))

востребование, да, это надо было делать ещё когда только 1-й Фол вышел,

но я тогда другим занимался, да и первые Фолы я сначала пропустил,

начал играть с 3-го и только уже после Вегаса, вернулся и прошёл 1-2

спасибо

Ссылка на комментарий

вместо того большого кол-ва правил что я насочинял ранее,  всё свелось к этому

и если бы \w дружила с русскими буквами, было бы ещё проще,

я разделил текст и то что за ним на две части, поэтому $ конец строки,

вторая часть отдельно проверяется, там только на скобки

 

 

 

# проверка правильного формата триады

if (($string =~ /^\{\d+\}\{\}\{[A-Za-zА-Яа-я0-9\s\!\@\$\%\^\&\*\(\)\-\=\_\+\|\\\[\]\;\:\'\"\,\.\<\>\/\?…]+\}$/)
 || ($string =~ /^\{\d+\}\{[A-Za-zА-Яа-я0-9\s\!\@\$\%\^\&\*\(\)\-\=\_\+\|\\\[\]\;\:\'\"\,\.\<\>\/\?…]+\}\{[A-Za-zА-Яа-я0-9\s\!\@\$\%\^\&\*\(\)\-\=\_\+\|\\\[\]\;\:\'\"\,\.\<\>\/\?…]+\}$/)
 || ($string =~ /^\{\d+\}\{\}\{\})$/) {
....
}
 

 

 

Ссылка на комментарий

так как у тебя большой опыт по игре, подскажи какие символы используются

Не совсем понял а зачем проверка на отдельные символы?

 

> \w дружила с русскими буквами

ну тут точно проблема кодировки, ищет наверное в UTF8 а русс символы в файле в ANSI 1251

Ссылка на комментарий

Не совсем понял а зачем проверка на отдельные символы?

 

> \w дружила с русскими буквами

ну тут точно проблема кодировки, ищет наверное в UTF8 а русс символы в файле в ANSI 1251

у меня локаль стоит UTF-8 и я пробовал текст в UTF-8 написать, не видит напрямую,

попробую сделать use open qw( :encoding(CP1251) может сработает

а в принципе и так уже свелось к 3-м строкам, правда навороченным )

 

да это не отдельная проверка, просто в строке могут присутствовать

 

{623}{}{ ::: Статистика :::}

{502}{}{[Уходит.]}

{312}{}{Чужак должен уйти!}

и т.д.

Ссылка на комментарий

Вообще, отдельный скрипт для проверки это неплохо, но, мне кажется, мало востребовано. Если бы в какой-то редактор встроено, это другое дело.

А мне кажется так удобнее положил чекнул, другое дело если бы оно имело графический отчет какой-нибудь.

 

Подобную проверку я встроил в sfallовский скриптовый редактор, но с другой концепцией и только на 1 файл, ибо что-то лень делать поддержку на все файлы в папке, может когда-нибудь потом, сейчас другие планы.

 

 

да это не отдельная проверка, просто в строке могут присутствовать

 

{623}{}{ ::: Статистика :::}

{502}{}{[Уходит.]}

{312}{}{Чужак должен уйти!}

и т.д.

И все равно не понял зачем их чекать?

Я думаю вот эти символы точно никогда не будут использоваться

^ \ @ - но смысл их чекать.

Ссылка на комментарий

А мне кажется так удобнее положил чекнул, другое дело если бы оно имело графический отчет какой-нибудь.

 

Подобную проверку я встроил в sfallовский скриптовый редактор, но с другой концепцией и только на 1 файл, ибо что-то лень делать поддержку на все файлы в папке, может когда-нибудь потом, сейчас другие планы.

 

И все равно не понял зачем их чекать?

Я думаю вот эти символы точно никогда не будут использоваться

^ \ @ - но смысл их чекать.

если не чекать, то при всём хорошо, у меня мессаже что строка не коррект,

я потом напишу что и как обрабатывается и на что про что ошибки выводит,

мне ещё пару проблем надо решить

 

если всё получится, то я затем GUI думаю добавить, тогда наверно можно

будет и не в файл, а в окно, но только наверно надо по очереди,

а не все 500 сразу, чтобы до утра не пришлось окна закрывать )

 

крышку и обратную не видел, а вот собачка попадалась

 

я теперь правильно сделал листинг, разделил процедуры

на подпрограмки, а то в том что было в один много повторный if, сам запутался

Ссылка на комментарий

Mr.Сталин

работает \w если указать cp1251, но тогда не ловит служебные символы которые

были набраны в utf8, так что лучше указать напрямую, или \xb8 \х92 ...

 

на Перл в цикле который for, тоже можно регексы исп. и можно так же делать

возврат на начало строки, чтобы проверять и на др. ошибки

кроме скобок и фиксировать, а затем вывести сообщение что строка содержит 6 ошибок

различного характера - проверяйте )

конечно если сделать шаблон элементов в массиве и сопоставлять символ

при проверке на соответствие позиции, то этот вариант будет наверно быстрее

и проще, мы ведь знаем сколько в строке должно быть скобок и их расположение,

там где не их место - ошибка

Ссылка на комментарий

SymbolFix 0.1.27

 

архив обновлён 27/01/2018

 

 

 

фактически скрипт был переписан почти весь заново,

примеры и пояснения по выводу сообщений в описании,

в исходном скрипте добавлены комментарии

 

 

 

Огромная благодарность талантливым людям

Mr. Сталин, Pyran, Foxx, Burn,
за проявленную отзывчивость и оказанную помощь

в процессе разработки этой маленькой утилиты.

Ссылка на комментарий

NodeFix 0.2.0.5

 

архив обновлён 05/02/2018, описание и исходный листинг в архиве

 

это новая версия утилиты для ОС Windows написана на MASM32 ))

выполняет туже функцию что и прошлая версия, которая была написана на Perl,

но теперь все сообщения выводятся на русском языке и в стандартном графическом окне,

работает быстрее и размер исполняемого файла уменьшился до смешного

 

для ОС Линукс скрипт написанный на Perl,  остался прежний

 

новая версия SymbolFix в проекте

Ссылка на комментарий

Графическое окно? - это же обычное черноеконсольное окно дос)

я уж удивился на ассемблере да еще и с графическим окном - фантастика)

не понял, что ты имел ввиду про  консольное окно дос и про какую фантастику?

ты новую утилиту NodeFix  смотрел на чём написана и какое окно выводит?

 

SymbolFix я пока ещё не переделывал, а в новой версии NodeFix

сообщения выводятся в MessageBox, окно которого ведь не консольное,

а стандартное Windows, поэтому я и написал графическое, только что

button один, но могу и 3 вывести, если кому мало )

диалогового окна не делал, для этой утилиты думаю что и не надо

 

у меня проблема с выводом окна на Перл возникла из-за компилятора,

не буду описывать причину, это долго и не нужно, поэтому я вернулся

к тому на чём писал в молодости, что мне больше понятно и нравится,

но MASM32 это ведь не настоящий Ассемблер,  посмотри исходник,

там фактически всё на API функциях

Ссылка на комментарий

ты новую утилиту NodeFix  смотрел на чём написана и какое окно выводит?

SymbolFix я пока ещё не переделывал, а в новой версии NodeFix

сообщения выводятся в MessageBox, окно которого ведь не консольное,

А тогда прошу прощения перепутал утилиты)

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...