Вверх ↑
Этот топик читают: Гость
Ответов: 48
Рейтинг: -1
#1: 2010-12-04 18:14:59 ЛС | профиль | цитата
Столкнулся с проблемой. В общем, мне надо в примерно 2000 файлах, сменить кодировку с ANSI на UTF8. Менять кодировку блокнотом согласитесь не вариант. Начал «придумывать» программу для перекодирования большого количества файлов. Получилось вот что:
code_21694.txt

Все в принципе нормально работает, вот только за исключением двух маленьких нюансов.

1. При перекодировании из ANSI в UTF8, кодировка (При открытии файла редактором Notepad++) получается не просто UTF8, а UTF8 (без BOM).
2. В конец каждого файла, не понятно почему, вставляются 3 пустые строчки.

Можно ли это исправить?


карма: 1

0
файлы: 1code_21694.txt [2.1KB] [305]
Администрация
Ответов: 15295
Рейтинг: 1519
#2: 2010-12-04 18:51:39 ЛС | профиль | цитата
1. BOM вставляться и не должен ибо его наличие не понимают большинство программ
2. текст загружается в список методом doText, а не doAdd
карма: 27
0
Ответов: 1379
Рейтинг: 86
#3: 2010-12-04 19:09:05 ЛС | профиль | цитата
Dilma писал(а):
текст загружается в список методом doLoad, а не doAdd

Dilma, если ты про второй StrList, то тогда может doText?
карма: 0

0
Ответов: 48
Рейтинг: -1
#4: 2010-12-04 20:42:37 ЛС | профиль | цитата
Dilma писал(а):
2. текст загружается в список методом doLoad, а не doAdd


Не понял. Поясните...
карма: 1

0
Ответов: 4641
Рейтинг: 334
#5: 2010-12-04 20:51:10 ЛС | профиль | цитата
Kuzya411 писал(а):
Не понял. Поясните...

в последнем strlist ты добавляешь текст методом doAdd , а надо doText
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 48
Рейтинг: -1
#6: 2010-12-04 21:22:59 ЛС | профиль | цитата
Ravilr писал(а):
в последнем strlist ты добавляешь текст методом doAdd , а надо doText

Все понял
карма: 1

0
Администрация
Ответов: 15295
Рейтинг: 1519
#7: 2010-12-04 21:25:16 ЛС | профиль | цитата
petrocan писал(а):
то тогда может doText?

да, верно
карма: 27
0
Ответов: 16884
Рейтинг: 1239
#8: 2010-12-05 00:26:49 ЛС | профиль | цитата
nesco, глянь. Почему я не могу перебрать SelectArray в обратном порядке ?
Туплю.
project8181.rar

------------ Дoбавленo в 00.26:
В прямом всё ОК
------------ Дoбавленo в 00.26:
Хотел упростить и ...
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1project8181.rar [905B] [120]
Разработчик
Ответов: 26164
Рейтинг: 2127
#9: 2010-12-05 01:31:46 ЛС | профиль | цитата
Мне кажется, что вот это -- полный бред


function THIListBox._arr_count;
var i:smallint;
begin
Result := 0;
for i := 0 to Control.Count-1 do
if Control.ItemSelected[i] then
inc(Result);
end;

Кому пришло в голову отбирать только выделенные пункты, получать их количество и подряд это количество потом выдавать, вне зависимости от выделенности. Хотя, описание к точке гласит недвухсмысленно об обратном
SelectArray=Хранит флаги выделения для каждого пункта списка

а не только для выделенных
------------ Дoбавленo в 01.31:
Исправлено
карма: 22

1
Голосовали:Tad
Ответов: 16884
Рейтинг: 1239
#10: 2010-12-05 10:42:49 ЛС | профиль | цитата
Совсем другой табак. [flood]
nesco писал(а):
Кому пришло в голову отбирать только выделенные пункты
видел, но я так сказать не мог [/flood]Спасибо.
------------ Дoбавленo в 10.39:
Kuzya411, вместо ComboBox примени ListBox в режиме MultiSelect=True. Можно использовать точку doSelectAll, а не нажимать далее 2000 раз.
И, перебирая снизу вверх, удалять из списка обработанный файл.
------------ Дoбавленo в 10.42:
Перед всем этим обнови ListBox с SVN !
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Гость
Ответов: 17029
Рейтинг: 0
#11: 2010-12-05 13:24:47 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-11 03:35:16
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#12: 2010-12-05 13:28:19 ЛС | профиль | цитата
Выше- это я.
Тогда наличие function THIListBox._arr_count; себя оправдывает.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26164
Рейтинг: 2127
#13: 2010-12-05 13:37:09 ЛС | профиль | цитата
85.64.238.11.dynamic.bara писал(а):
а может SelectArray должен был хранить индексы выбранных строк ?

тогда это должно было быть, сначала, отражено в описании к точке SelectArray. К примеру
SelectArray=Хранит индексы выделения для пунктов списка

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

карма: 22

0
Ответов: 3
Рейтинг: 4
#14: 2011-01-17 04:15:00 ЛС | профиль | цитата
Здравствуйте!

Я только начинаю пользоваться Hiasm'ом. Но у меня также возникла проблема с кодировками. В частности необходимо редактировать текстовые файлы с кириллическим текстом в кодировке UTF-8 и соответственно сохранять в этом формате. Можно конечно это делать и сторонними программами, например AkelPad, Notepad++ и др., но очень интересно сделать свою программу, заодно и поучиться работать в Hiasm'е.
Я взяла пример из состава Hiasm под названием "Notepad", добавила в неё компонент Charset (UTF8_ANSI), который работает при открытии файла, и аналогично, при сохранении файла, только в обратную сторону ((ANSI_UTF8). Проверила - все отлично работает. Но это на русской ОС Windows SP3 (лицензия, стоит на ноутбуке). А вот на другом компьютере, там у меня стоит немецкая ОС Windows 7 (лицензия), вместо русских букв одни знаки вопросов. Затем, если создать новый документ, написать текст по русски и сохранить, то при открытии этого файла, например, тем же AkelPad, документ будет в формате UTF-8, но вместо русских букв отображаются иероглифы.
Сразу скажу, что текстовые файлы с русским текстом в формате UTF-8 на немецкой ОС текстовыми редакторами AkelPad, Notepad++ открываются правильно, русский текст отображается, а вот моей программе знаки вопросов.

В связи с этим у меня возникают вопросы:
1) Почему они верно открывают файлы, а моя программа не правильно?
2) Можно ли реализовать подобный механизм в программе, созданной с помощью Hiasm?

Я начала искать ответ на вашем форуме. Нашла много разных примеров, но конкретной реализации нет (если они есть, то ткните носом, я не обидчивая). В основном все вопросы были связаны с правильным отображением букв русского алфавита на русских (пиратских) ОС Windows, с правкой реестра, подменой локали и т.д. А как быть на системах с другим системным языком? Причем, я против каких либо кардинальных правок в системе. Как я поняла, вместо русской кодовой страницы 1251 берется 1252 и из-за этого получается ошибка на этапе преобразования из UTF-8 в ANSI (и наоборот, при сохранении). Но почему такая ошибка не происходит при открытии файла в том же AkelPad или Notepad++? Кто-то здесь давал совет, что необходимо задать жесткую привязку по кодовым страницам. Решила попробовать. Указала для преобразования UTF8 - 65001, а для ANSI - 1251. Скомпилировала проект, перенесла программку на немецкую ОС и запустила. Открыла документ и... вместо русских букв уже не знаки вопросов, а какие-то кракозяблики. Прогресс на лицо. На Википедии (здесь у вас тоже ссылку давали) установила, что мои иероглифы соответствуют отображению кодовой страницы 1251 символами страницы 1252. Делаю вывод, преобразование UTF8_ANSI моя программа сделала правильно, но для отображения текста была взята кодовая страница 1252 используемая в системе по умолчанию.
В своем проекте, в компоненте Memo, в свойствах шрифта указала "Кириллический" набор символов. Снова скомпилировала программку и запустила на немецкой оси. О чудо, теперь русский шрифт отображается верно. Делаю небольшие заметки на русском и сохраняю документ. Для проверки правильности формата открываю его AkelPad'ом. Все верно, русские буквы на месте и формат UTF-8. Моя первая маленькая победа. Но...

Если мое творение, запустит у себя на компьютере, например, француз или испанец, с соответствующей их языку локалью ОС Windows, то открыв свой документ, они увидят иероглифы или знаки вопросов. Потому что, в программе жестко указаны кодовые страницы и набор символов. Как быть?

Подскажите, пожалуйста, как можно избежать указания конкретной кодовой страницы, а использовать просто метод UTF8_ANSI (ANSI_UTF8)?

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

А вот как быть с правильным определением кодовой страницы?

Вот ваша программка немного мной переделанная.

code_22216.txt

С уважением, Horna.
карма: 0

4
файлы: 1code_22216.txt [6.1KB] [187]
Голосовали:Netspirit, foksov, Ivann, petrocan
Ответов: 8930
Рейтинг: 823
#15: 2011-01-17 09:40:53 ЛС | профиль | цитата
Специалисты, вы что, спите?! [flood]Первый раз вижу от новичка полностью и грамотно поставленный вопрос знал бы, где искать ответ - в лепёшку расшибся, но нашёл, тем более для дамы [/flood]
карма: 19

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)