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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2014, 12:50   #1
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию Консольная программа

Привет!

Раньше особо не занимался консольными приложениями, вот назрел вопрос.
Написал приложение которое формирует плейлист, обрабатываются папки с подпапками, файлы.
С обработкой и записью плейлистов все в порядке, собственно вот о чем я:
кидаю драг-н-дропом на приложение, пути все читаются (в том числе с русскими символами)
записываю команды в батник и передаю - пути с русскими символами не читаются!
перепробовал кучу советов, и про функции

Код:
function StrAnsiToOem(aStr: string): AnsiString;
begin
  Result := '';
  if Length(aStr) > 0 then
  begin
    SetLength(Result, Length(aStr));
    CharToOem(PChar(aStr), PAnsiChar(Result));
  end;
end;

//Функция берёт строку в OEM кодировке (DOS)
//и возвращает её перевод в ANSI кодировку (Windows) в виде отдельной строки.

function StrOemToAnsi(const aStr: AnsiString): string;
begin
  Result := '';
  if Length(aStr) > 0 then
  begin
    SetLength(Result, Length(aStr));
    OemToChar(PAnsiChar(aStr), PChar(Result));
  end;
end;

function Rus(Mes: ansistring): string;
var
  I: Integer;
begin
  for I := 1 to Length(Mes) do
    case Mes[I] of
      'А'..'п': Mes[I] := ansichar(Chr(Ord(Mes[I]) - 64));
      'р'..'я': Mes[I] := ansichar(Chr(Ord(Mes[I]) - 16));
    end;
  Result := Mes;
end;
тоже знаю

и это не помогает
Код:
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Есть еще какой-нибудь выход?

Delphi XE5, Win 7
ZuBy вне форума Ответить с цитированием
Старый 30.01.2014, 13:29   #2
Streletz
Старожил
 
Регистрация: 03.01.2014
Сообщений: 2,870
По умолчанию

Начиная с Delphi 2009 типы char и string в Юникоде. То есть, сейчас string - это, по старому, WideString.
Streletz вне форума Ответить с цитированием
Старый 30.01.2014, 13:36   #3
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Цитата:
Сообщение от Streletz Посмотреть сообщение
Начиная с Delphi 2009 типы char и string в Юникоде. То есть, сейчас string - это, по старому, WideString.
Вообще-то я в курсе и код (представленный в этой теме) адаптирован под Unicode!

Это не решает проблемы!

Вот, кому не понятна суть проблемы!


Код:
          writelnr(' **********************Params*********************** ');
          writelnr(' help              : -?');
          writelnr(' playlist type     : -t 0 - .pls (default)');
          writelnr('                        1 - .m3u');
          writelnr('                        2 - .txt');
          writelnr(' output filename   : -o "c:\output-dir\playlist.pls" (default "c:\playlist.pls")');
          writelnr(' files or path     : "c:\filename1.mp3", "c:\filename2.aac", "c:\filename.flac"');
          writelnr('                     "c:\music\"');
          WritelnR(' Examples:');
          writelnr(' plsmaker.exe -?');
          WritelnR('   view help');
          writelnr(' plsmaker.exe -o "c:\playlist.pls" "c:\music\album\"');
          writelnr('   all files from directory (and subdirectories if exist) was processed to output file');
          writelnr(' *************************************************** ');

Последний раз редактировалось ZuBy; 30.01.2014 в 13:49.
ZuBy вне форума Ответить с цитированием
Старый 30.01.2014, 16:14   #4
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Никто с этим не сталкивался? Не верю!
ZuBy вне форума Ответить с цитированием
Старый 30.01.2014, 16:25   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Шрифт консоли поменяй с System надругой, юникодный.
Человек_Борща вне форума Ответить с цитированием
Старый 30.01.2014, 16:26   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

@chcp 1251 в начало батника не пробовали?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.01.2014, 16:34   #7
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

У него не батник.
Человек_Борща вне форума Ответить с цитированием
Старый 30.01.2014, 16:37   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
У него не батник
Цитата:
записываю команды в батник и передаю
теперь вообще не понимаю о чем речь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 30.01.2014, 16:41   #9
ZuBy
Участник клуба
 
Аватар для ZuBy
 
Регистрация: 29.09.2008
Сообщений: 1,234
По умолчанию

Как раз таки через батник и косяк!
Щас попробую
Цитата:
@chcp 1251
Просто прекрасно! Работает!

Но как быть если эту программку будут использовать другой человек? Так же делать?

Как например архиваторы пути понимают? работал сам лично и с zip и rar. там так не делал!

Последний раз редактировалось ZuBy; 30.01.2014 в 16:44.
ZuBy вне форума Ответить с цитированием
Старый 30.01.2014, 22:33   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Как например архиваторы пути понимают? работал сам лично и с zip и rar. там так не делал!
русские имена в батнике (по умолчанию) должны быть в кодировке OEM (она же 866).
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
консольная программа closeAll Помощь студентам 2 24.05.2013 19:37
Консольная программа/C++ ПроГрамм Помощь студентам 3 07.11.2012 10:51
Проверить висит ли консольная программа.. Человек_Борща Общие вопросы Delphi 2 25.12.2010 13:24
Консольная программа под Linux amdbodia Общие вопросы C/C++ 8 14.06.2009 20:23
Консольная программа на Си: ввод, вывод, сортировка, сохранение в текстовый файл. zerg Помощь студентам 8 16.11.2007 12:57