Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2014, 03:13   #1
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию Проблема в кодировке? Делфи

Доброго времени суток.
Суть проблемы в нижеследующем.
Почти доделал парсер для игрушки одной. Там нужно из кода страницы выделить пару чисел.
Большие числа записываются так: 1 234 567
Есть одно НО, нужно убрать "пробелы" между цифрами.
Теперь конкретно, делфи(memo), блокнот, исходный код и т.п. определяют эти "пробелы" как пробелы.
Когда собираюсь удалять их функциями AnsiReplaceStr/StringReplace/самопальная как оказывается, что это не пробелы потому, что их не удаляет ни что.
Решил оставить пока так и попытаться вставить эти числа в топик форума игры.
Получилось: 1?234?567
Теперь я не знаю что делать. Мне ещё нужно будет с этими числами работать, но в integer перевести по понятной причине не могу.
Помогите пожалуйста.
Artsiom вне форума Ответить с цитированием
Старый 12.05.2014, 06:40   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Проходишь в цикле по каждому символу и формируешь новую строку. Условием для проверки будет обязательно наличие цифры, для этого удобно использовать множества. А только потом уже перегоняешь в число.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.05.2014, 07:48   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я бы ради интереса посмотрел в НЕХ редакторе что это за символ. Возможно просто табуляция.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 12.05.2014, 08:39   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы тоже посмотрел, что это за символы там спрятались за пробелами.
Вариант - можно сохранить в файл и посмотреть hex-редактором.
А можно и в delphi заглянуть, что это за символы.
вот так, например:
Код:
var S, SRez : string;
 i : integer;
begin
  S := '1'#13'234'#9#9'567'; {вместо этого занесите в  S вашу строку с цифрами со страницы}
  SRez := '';
  for i:=1 to Length(S) do
    SRez := SRez + ' '+IntToHex(ord(S[i]),4);

  Edit1.Text := SRez; {выведите полученную строку с кодами для просмотра/анализа}

end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2014, 12:21   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Неразрывные пробелы, скорее всего.
Vapaamies вне форума Ответить с цитированием
Старый 12.05.2014, 13:28   #6
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я бы тоже посмотрел, что это за символы там спрятались за пробелами.
Посмотрел по вашему коду, из числа 978 874 получилось 0039 0037 0038 00A0 0038 0037 0034
00А0, что это за пакость такая?
Конечно пройти числа самопальной функцией можно, но программа и так не блещет скоростью, даже не представляю сколько она будет работать не на стационарном, а на нетбуке...
Artsiom вне форума Ответить с цитированием
Старый 12.05.2014, 13:37   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Artsiom Посмотреть сообщение
Посмотрел по вашему коду, из числа 978 874 получилось 0039 0037 0038 00A0 0038 0037 0034
00А0, что это за пакость такая?
Конечно пройти числа самопальной функцией можно, но программа и так не блещет скоростью, даже не представляю сколько она будет работать не на стационарном, а на нетбуке...
Поздравляю Vapaamies, он телепатировал верно.

код 0x00A0 = 160 - это Неразрывный пробел     (например, тыц)

а зачем Вам что-то писать.
достаточно:
AnsiReplaceStr / StringReplace и заменить символ #160 на '' (пустую строку)
или даже так:
Код:
while Pos(#160, s)>0 do Delete(s, Pos(#160, s), 1);

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

Последний раз редактировалось Serge_Bliznykov; 12.05.2014 в 13:39.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 12.05.2014, 13:41   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
AnsiReplaceStr / StringReplace и заменить символ #160 на '' (пустую строку)
Я бы рекомендовал свой вариант. Пес его знает что и как-там формируется. Сегодня пробел, завтра табуляция, да и более чем уверен расширенных тестов ТС не проводил и потому даже без апгрейдов вполне вероятны случаи когда все по закону и между цифрами не пробел, а что-то такое есть. А цифры в большинстве кодировок выглядят как цифры и потому счастье очень даже может быть.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 12.05.2014, 13:58   #9
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Спасибо!!!
А зачем делать расширенные тесты? Прога очень узкоспециализированная, работает со множеством однотипных страничек.
А тормозит, догадываюсь из-за чего.
Использовать невидимые мемо в качестве переменных, что бы скроить чужие куски кода, думаю не есть хорошо...
Artsiom вне форума Ответить с цитированием
Старый 12.05.2014, 14:02   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Использовать невидимые мемо в качестве переменных, что бы скроить чужие куски кода, думаю не есть хорошо...
Конечно. Невидимый Мемо это TStringList (на случай, если Вы автор программы).
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема в кодировке сообщений ВКОНТАКТЕ temchik2004 Работа с сетью в Delphi 6 04.09.2013 14:33
Ошибка в кодировке GET --Egor-- PHP 4 31.07.2012 23:46
Ошибка в кодировке asnikifor PHP 7 23.09.2011 22:44
Вопрос о кодировке. vedro-compota PHP 16 29.09.2010 17:48