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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.08.2014, 15:02   #1
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию Побайтовое чтение непонятные символы delphi xe6

Вот код чтения
Код:
AssignFile(FileByte, FileName);
    WStr:='';
    reset(FileByte);
    while not Eof(FileByte) do begin
      Read(FileByte, sym);
      WStr:=WStr+chr(sym);
    end;
но в итоге вместо руского текста выходит черти что. Пробовал вместо WStr:=WStr+chr(sym);
WStr:=WStr+PChar(chr(sym));
или
WStr:=WStr+PAnsiChar(chr(sym));
Но такой метод приводит к системной ошибки.
Пожалуйста помагите. все варианты перепробывал даже сохранял файл в разных кодировках как в бокноте так и в notepad++
ничего не помагает. чтения должно быть побайтным
delphi xe6
Alexandr17 вне форума Ответить с цитированием
Старый 18.08.2014, 15:18   #2
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Ну во первых давно уже пора использовать TFileStream вместо старого паскалевского кода. А во вторых стесняюсь спросить, файл точно текстовый? В FileName правильный путь к файлу находится?
FaTaL вне форума Ответить с цитированием
Старый 18.08.2014, 15:19   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
чтения должно быть побайтным
Если не секрет почему?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.08.2014, 15:36   #4
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Alexandr17 Посмотреть сообщение
Вот код чтения
[CODE]...Но такой метод приводит к системной ошибки.
Пожалуйста помагите. все варианты перепробывал даже сохранял файл в разных кодировках как в бокноте так и в notepad++
ничего не помагает. чтения должно быть побайтным
delphi xe6
А можно по байтам прочитать в байтовый буфер и скормить его энкодеру? В общем случае нельзя без знания способа кодирования из байтов получить символ ибо последний может занимать произвольное число байт =-)
Если же уверен, что у нас 1 байт на символ, то можно перегнать и по байтам. Только PAnsiChar - это указатель на символ, сам символ - это AnsiChar. При этом вообще говоря энкодер всё равно сделает своё черное дело при приведении к String, если таковое будет (на основании опции ОС "использовать такую-то страницу\кодировку для не юникод программ").
StriderX вне форума Ответить с цитированием
Старый 18.08.2014, 15:37   #5
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

потомучто это быстрый способ темболее что обычное чтения может не дать всех симвлов и какието просто пропустить. Файл 100 % текстовой путь правильный. я делаю свой скрипт локализации прогамки. не охото для этого ini использовть.
Alexandr17 вне форума Ответить с цитированием
Старый 18.08.2014, 15:38   #6
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от Alexandr17 Посмотреть сообщение
потомучто это быстрый способ темболее что обычное чтения может не дать всех симвлов и какието просто пропустить. Файл 100 % текстовой путь правильный. я делаю свой скрипт локализации прогамки. не охото для этого ini использовть.
Способ не быстрый, а зависящий от платформы. Вот будет ОС производить некое упреждающее чтение\кэширование - будет всё летать. Передумает ОС этим заниматься - будет всё ползать.
StriderX вне форума Ответить с цитированием
Старый 18.08.2014, 15:52   #7
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

И зачем Вы не хотите ИНИ для локализации? Помоему нормальное решение + каждый юзер всегда сам сможет перевести программу на свой язык изменив нужные параметры ИНИ файла.
FaTaL вне форума Ответить с цитированием
Старый 18.08.2014, 16:00   #8
StriderX
Форумчанин
 
Регистрация: 21.04.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от FaTaL Посмотреть сообщение
И зачем Вы не хотите ИНИ для локализации? Помоему нормальное решение + каждый юзер всегда сам сможет перевести программу на свой язык изменив нужные параметры ИНИ файла.
Ну, кстати да, от этому механизму уже несколько веков, практически не менялся. Сюда влепился MemIni, когда локализация отвалилась из-за превышения лимита в 64кб. Чуть позже влепился TDictionary и всё.
Энкодер юникодный в любой момент лепится и хоть в Китай.
Код:
function TTranslator.GetTranslation(key: string): string;
begin
        if (dictionary.TryGetValue(key, result) = false) then begin
                result := key;
        end;
end;

procedure TTranslator.LoadFromFile(filename: string);
var
        f : TMemIniFile;
        section_items : TStringList;
        i, s : string;
        p : Integer;
begin
        if (FileExists(filename)) then begin
                f := TMemIniFile.Create(filename, TEncoding.GetEncoding(1251));
                section_items := TStringList.Create();

                f.ReadSection(TRANSLATION_MAIN_SECTION, section_items);

                if (section_items.Count > 0) then
                for i in section_items do begin
                        s := f.ReadString(TRANSLATION_MAIN_SECTION, i, i);
                        if (dictionary.ContainsKey(i)) then begin
                                raise EListError.Create('Dublicate with key ' + i + ' in ' + filename);
                        end else begin
                                dictionary.Add(i, s);
                        end;
                end;

                section_items.Free();
                f.Free;
        end;
end;
StriderX вне форума Ответить с цитированием
Старый 19.08.2014, 04:26   #9
Alexandr17
Форумчанин
 
Регистрация: 10.12.2013
Сообщений: 227
По умолчанию

а что за тип TMemIniFile
Alexandr17 вне форума Ответить с цитированием
Старый 19.08.2014, 09:58   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
потомучто это быстрый способ
Побайтовое чтение самый медленный способ, чтоб ты знал.
а вот для 100%-вого текстовика StringList или TstringStream самое оно - быстрее некуда.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
RAD XE6 русские символы GGaDz Qt и кроссплатформенное программирование С/С++ 1 24.04.2014 11:39
Побайтовое чтение файла rus_phantom Общие вопросы C/C++ 1 23.10.2011 11:22
Непонятные символы Кристинка89 Общие вопросы Delphi 7 08.09.2011 02:47
Побайтовое чтение с редактированием DedBoroda Общие вопросы Delphi 1 22.10.2010 02:48
непонятные символы XATAB Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 28.12.2007 11:23