Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 909

/ вопрос решён /

Здравствуйте!
1)подскажите пожалуйста как создать программу которая работает с командной строкой, т.е. пишится имя программы и передоваемые ей параметры.
2) объясните как работает XOR например a:=b xor v;
тип Char . каким образом он сравнивает этот тип

Stepani4 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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;

Ответ отправил: Помфюк Владимир Степанович (статус: Абитуриент)
Время отправки: 11 сентября 2007, 12:39
Оценка за ответ: 5

Ответ #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)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.02 сек.