purebasic.info

PureBasic forum
Текущее время: Ср сен 19, 2018 4:09 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 442 ]  На страницу Пред.  1 ... 26, 27, 28, 29, 30
Автор Сообщение
 Заголовок сообщения: Re: Разные вопросы [0ffTop]
СообщениеДобавлено: Пн янв 11, 2016 2:03 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
LinXP писал(а):
Код:
1
2
3
4
5
6
7
8
Procedure Test(byte)
  stribg.s = " !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}" ; строка будет загружаться с файла настроек
  For i = 1 To Len(stribg)
    If byte =  Asc(Mid(stribg, i, 1))
      ProcedureReturn #True  
    EndIf
  Next i
EndProcedure



Вообще, работа со строками очень не оптимизирована у пурика. И если у тебя бинарник будет от 10мб и выше, то почувствуешь нехватку скорости.
А в твоем примере проще и выгоднее использовать массив, куда ты будешь загружать Asc значения символов и потом сравнивать с полученным байтом. И прирост скорости должен значительно возрасти.

LinXP писал(а):
мне приходится разобрать полностью структуру бинарника

А что за бинарники, если не секрет?


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разные вопросы [0ffTop]
СообщениеДобавлено: Пн янв 11, 2016 2:51 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 147
Откуда: Україна
Благодарил (а): 10 раз.
Поблагодарили: 10 раз.
Пункты репутации: 4
Цитата:
А в твоем примере проще и выгоднее использовать массив, куда ты будешь загружать Asc значения символов и потом сравнивать с полученным байтом.

Вот про подобный пример я и спрашивал :)
ну вот такой пример я надумал, но если понадобится поиск юникода или utf, то хз как потом извращаться..:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
 
  string.s = " !#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}" ; строка будет загружаться с файла настроек
  Global Dim myArray.l(256)
  For i = 1 To Len(string)
    myArray(Asc(Mid(string, i, 1))) = #True
  Next i
 
......
 
    If myArray(b)
      f+1    
    Else  



Цитата:
И если у тебя бинарник будет от 10мб и выше, то почувствуешь нехватку скорости.

В общем то мне скорость не сильно важна, на "исследования" я трачу куда больше времени..

Цитата:
А что за бинарники, если не секрет?

Любительский перевод игр на андроид и ПК, у всех всё разное, вот и созрел на написание проги для импорта-экспорта текста, не всегда это сможет пригодиться, но пусть лучше будет под рукой..


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разные вопросы [0ffTop]
СообщениеДобавлено: Пн янв 11, 2016 4:09 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
LinXP писал(а):
такой пример я надумал

Да, что-то вроде этого :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разные вопросы [0ffTop]
СообщениеДобавлено: Пн янв 11, 2016 4:34 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
LinXP писал(а):
но если понадобится поиск юникода или utf, то хз как потом извращаться

В юникоде надо в место одного байта читать два, и сравнивать с двумя байтами юникодного символа. Но проблема может быть, если используются какие-то свои кодировки. Придется для каждой кодировки писать новый алго. И еще проблема с импортом может быть, когда строка по размеру не будет совпадать с оригинальной, и если бинарник структурированный, то отклонение на +-1 байт может испортить всю структуру. Поэтому, по феншую, лучше парсить бинрник на составляющие, а там строки сами вылезут.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разные вопросы [0ffTop]
СообщениеДобавлено: Пн янв 11, 2016 5:50 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 147
Откуда: Україна
Благодарил (а): 10 раз.
Поблагодарили: 10 раз.
Пункты репутации: 4
MrF, ну разумеется, прожка мне нужна только для тех случаев, когда перед тестом указана длинна текста, то есть я сначала буду читать длинну текста, потом читать данные этой длинны, проверять на наличие текста, если ок, то экспорт смещения и текст... при импорте: прыжок на смещение и актуализация текста и длинны
Чтото не могу вспомнить простенький пример с такими данными, под рукой только этот есть http://rghost.ru/7BJdJlTfP (но тут длинна перед текстом пишется специфически (7BitEncodedInt)) ну или такой по проще http://rghost.ru/8Tty5nX2w (четыре байта перед текстом - длинна, int32) но текст в utf-16
а вот на этом примере http://rghost.ru/8wxcVmTNs - прога уже будет бесполезна (ну если конечно не придерживаться оригинальной длинны строки)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разные вопросы [0ffTop]
СообщениеДобавлено: Пн янв 11, 2016 6:35 am 
Не в сети
профессор

Зарегистрирован: Вс июн 10, 2012 8:18 am
Сообщений: 1294
Благодарил (а): 60 раз.
Поблагодарили: 49 раз.
Пункты репутации: 14
LinXP писал(а):
при импорте: прыжок на смещение и актуализация текста и длинны

В общем да, но может еще зависеть, если структура бинарника блочная и в виде матрешки, т.е. перед строкой стоит ее размер, строка находится в блоке и перед этим блоком стоит размер этого блока, этот блок находится в следующем блоке и т.д.. Т.е. мало поменять размер у строки, надо еще у блоков менять размер. Я это имел ввиду, но такие наверно не часто тебе попадаются.

LinXP писал(а):
а вот на этом примере http://rghost.ru/8wxcVmTNs - прога уже будет бесполезна (ну если конечно не придерживаться оригинальной длинны строки)

А почему бесполезна? Там размер строк это все, что до текста идет, или что это? И посмотри на 9A 2C 01 00 перед строками - очень похоже на размер всего файла минус 8 байт.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения: Re: Разные вопросы [0ffTop]
СообщениеДобавлено: Пн янв 11, 2016 7:58 am 
Не в сети
док
Аватар пользователя

Зарегистрирован: Сб мар 28, 2015 11:06 pm
Сообщений: 147
Откуда: Україна
Благодарил (а): 10 раз.
Поблагодарили: 10 раз.
Пункты репутации: 4
как раз в этом примере нет размеров строки, в начале идёт id строки и адрес начала, концом строки служит байт 0x00
вообщем кодом наверное проще показать ))
Код:
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
27
28
29
30
31
32
33
34
 
; http://rghost.ru/8wxcVmTNs
#FileIn = 0
#FileOut = 1
 
Structure DAT
  id.i
  offset.i
  text.s
  size.i
EndStructure
 
File$ = OpenFileRequester("Please choose file to load", "", "test (*.dat)|*.dat", 0)
If OpenFile(#FileIn,File$)
  NewFile$ = GetPathPart(File$) + GetFilePart(File$, #PB_FileSystem_NoExtension) + ".txt"
  CreateFile(#FileOut, NewFile$)
  Count.i = ReadLong(#FileIn)
  Global Dim GameText.DAT(count)
  For c = 0 To Count - 1
    With GameText(c)
      \id = ReadLong(#FileIn)
      \offset = ReadLong(#FileIn)
      Position.q = Loc(#FileIn)
      FileSeek(#FileIn, \offset)
      \text = ReadString(#FileIn, #PB_Ascii)
      \size = Len(\text)
      FileSeek(#FileIn, Position)
      String.s = Str(\id) + Chr(9) + \text
      WriteStringN(#FileOut, String, #PB_UTF8)
      Debug String
    EndWith
  Next c
  MessageRequester ("Alert", "Done!!!"+ #LF$ + "New file: " + NewFile$)
EndIf



Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 442 ]  На страницу Пред.  1 ... 26, 27, 28, 29, 30

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB