|
Вопрос # 909/ вопрос решён / |
|
Здравствуйте!
1)подскажите пожалуйста как создать программу которая работает с командной строкой, т.е. пишится имя программы и передоваемые ей параметры.
2) объясните как работает XOR например a:=b xor v;
тип Char . каким образом он сравнивает этот тип
 |
Вопрос задал: Stepani4 (статус: Посетитель)
Вопрос отправлен: 11 сентября 2007, 12:26
Состояние вопроса: решён, ответов: 3.
|
Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович
Здравствуйте, Stepani4!
1. Создаёте проэкт, в свойствах указываете, что программа консольная. (Точно не помню названия. Если не найдёте, просто допишите в dpr-файле после program строку {$APPTYPE CONSOLE})
2. xor - операция сложения по модулю 2, т.е. (0 xor 0) = (1 xor 1) = 0, (1 xor 0) = (0 xor 1) = 1
3. Char - один символ, размер 1 байт. Сравнение происходит по коду символа. Если хотите увидеть полную таблицу напишите такой код
i:byte;
c:char;
begin
for i:=0 to 255 do begin
c:=chr(i);
..................
{здесь каким-то образом организуйте вывод пары "код, символ", например writeln(i,c); в консоль}
..................
end;
end;
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, Stepani4!
По порядку.
1)Что бы вызвать программу с параметрами нужно просто вызывать например так
WinExec(\'notepad.exe test.txt\',SW_NORMAL);
и хотя эта процедура считается устаревшей, на первое время хватит. а потом беритесь за CreateProcess. Здесь на сайте уже было упоминание этой функции.
2) xor - исключающее побитное или. табличка истиности такая
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
В случае с байтами всё происходит побитно. тоесть.
3 xor 5 = 00000011b xor 00000101b = 00000110b = 6;
char тип сравнивается по кодам символов. Для этого дела есть "кодовые таблицы". в Windows по умолчанию используется cp1251. Узнать числовой код символа просто - функция ord - ord(\'a\'). для обратного процесса есть функция chr(32) - это у нас пробел.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 11 сентября 2007, 12:40
Оценка за ответ: 5
|
Ответ #3. Отвечает эксперт: Feniks
Здравствуйте, Stepani4!
Дополнение к ответам "Помфюк Владимир Степанович" и "Вадим К" по первой части Вашего вопроса...
Если Вы хотите, что бы Ваша программа могла обрабатывать параметры передаваемые ей с командной стройки при запуске, например
myapp.exe -d -r /? test.txt
то Вам надо использовать функции :
function ParamCount: Integer;
ParamCount - возвращает число параметров, переданных в программу через командную строку. Параметры в командной строке должны отделяться друг от друга пробелами или символом табуляции. Если требуется в качестве одного параметра передать в программу несколько слов, то такой параметр должен при вызове программы заключаться в двойные кавычки.
Значения переданных параметров могут быть прочитаны функцией ParamStr
function ParamStr(Index: Integer): string;
ParamStr(Index) - Index указывает номер параметра командной строки, возвращаемой функцией ParamStr. Если Index превышает значение ParamCount, то возвращается пустая строка. Если задан Index = 0, то возвращается имя выполняемого файла данной программы с полным путем к нему, например: "C:\TEST\MYPROG.EXE".
И для этого совсем не обязательно свою прогу делать консольной, т.е. компилировать с директивой {$APPTYPE CONSOLE}. Если конечно же нет таких условий в Вашей задачи.
А по второй части сказать уже нечего, так как мои предшественники (коллеги) прекрасно все рассказали и наглядно показали :-) ;-)
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 11 сентября 2007, 14:52
Оценка за ответ: 5
Комментарий к оценке: Дополнение прямо в точку. пасибо
|
Мини-форум вопроса
Всего сообщений: 0.
31 января 2011, 19:23: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|