Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

Разъясните пожалуйста как ............... (С++builder)

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
ChaynikSoft
Гость





СообщениеДобавлено: Пт Май 24 2002 11:28    Заголовок сообщения: Разъясните пожалуйста как ............... (С++builder) Ответить с цитатой

Здравствуйте господа программисты!

Прошу помощи в разъяснении следующего вопроса:
У меня есть некая процедура, которая смотрит Edit1, где указан путь к файлу, процедура берет его и работает с файлом. После работы заканчивается.
Мне нужно чтоб эта процедура обработало, таким образом, несколько файлов (4 шт.).
Я поместил в форму 4 компонента (Edit1-Edit4) в которых определил пути к файлам.
Как мне написать код?
Ведь, если я буду писать один код, но с разными путями четыре раза, это не правильно и сильно много кода. Как делают в таких случаях?
Используют переменные?
Вернуться к началу
Adil
Гость





СообщениеДобавлено: Пт Май 24 2002 12:00    Заголовок сообщения: Re: Разъясните пожалуйста как ............... (С++builder) Ответить с цитатой

Да, используют переменные и функции. Нечто, вроде:
//-----------------------------
void __fastcall Form1::BtnFileJobClick(TSender*)
{
' FuncFileJob(Edit1->Text);
' FuncFileJob(Edit2->Text);
' FuncFileJob(Edit3->Text);
' FuncFileJob(Edit4->Text);
}
//-----------------------------
void __fastcall Form1::FuncFileJob(AnsiString & FileName)
{
' if(FileExists(FileName))
' {
' //нечто делаем
' }
' else
' ShowMessage(AnsiString("Error file name: ")+FileName);
}
Удачи.
Вернуться к началу
ChaynikSoft
Гость





СообщениеДобавлено: Сб Май 25 2002 09:33    Заголовок сообщения: Re: Разъясните пожалуйста как ............... (С++builder) Ответить с цитатой

Да, это понятно, а как после обработки первого файла подставить второй.
использовать переход по меткам?

Я чего то недопонимаю.
Вернуться к началу
Adil
Гость





СообщениеДобавлено: Сб Май 25 2002 11:47    Заголовок сообщения: Re: Разъясните пожалуйста как ............... (С++builder) Ответить с цитатой

>Да, это понятно, а как после обработки >первого файла подставить второй.
>использовать переход по меткам?

>Я чего то недопонимаю
Так, это уже я чего-то недопонимаю. Ты имеешь в виду это место:
{
' //нечто делам
}
(?)

Если ты хочешь по-разному обрабатывать разные файлы, то и код обработки у тебя будет разный, ех., разные функции:
//-----------------------------
void __fastcall Form1::BtnFileJobClick(TSender*)
{
' FuncFileJob01(Edit1->Text);
' FuncFileJob02(Edit2->Text);
' FuncFileJob02(Edit3->Text);
' FuncFileJob04(Edit4->Text);
}
//-----------------------------
void __fastcall Form1::FuncFileJob01(AnsiString & FileName){...}
//-----------------------------
void __fastcall Form1::FuncFileJob02(AnsiString & FileName){...}
//-----------------------------
void __fastcall Form1::FuncFileJob02(AnsiString & FileName){...}
//-----------------------------
void __fastcall Form1::FuncFileJob03(AnsiString & FileName){...}
//-----------------------------

Или ты что-то другое имешь ввиду?
Удачи.
Вернуться к началу
ChaynikSoft
Гость





СообщениеДобавлено: Сб Май 25 2002 12:48    Заголовок сообщения: Re: Разъясните пожалуйста как ............... (С++builder) Ответить с цитатой

Скажем я пишу так:
void __fastcall Form1::BtnFileJobClick(TSender*)

если (галочка1->отмечена)
{
выполняю для одного файла.
........ процедура ........
..........Edit1->Text;
.........
}
далее проверяю
если (галочка2->отмечена)
{ .... процедура ....
процедура одинакова для
......... Edit2->Text;
}
далее проверяю
если (галочка3->отмечена)
{ .... процедура ....
процедура одинакова для
......... Edit3->Text;
}

Так вот процедуру переписывать каждый раз, или можно как то подставить только значения.
Если подставлять, то как сказать, что нужно теперь процедуру начать сначала но с другой переменной.
Или просто написать несколько раз одно и тоже но с разными названиями файлов. И по клику будет выполняться все последовательно.
И не обращать внимание на то что много текста (кода) одинакового.
Вернуться к началу
Adil
Гость





СообщениеДобавлено: Сб Май 25 2002 19:10    Заголовок сообщения: Re: Разъясните ... Ответить с цитатой

Тогда так:
//-----------------------------
void __fastcall Form1::BtnFileJobClick(TSender*)
{
' if(галочка1->отмечена)
' {
' FuncFileJob(Edit1->Text);
' }
' if (галочка2->отмечена)
' { .... процедура ....
' FuncFileJob(Edit2->Text);
' }
' if (галочка3->отмечена)
' { .... процедура ....
' FuncFileJob(Edit3->Text);
' }
' if (галочка4->отмечена)
' { .... процедура ....
' FuncFileJob(Edit4->Text);
' }
}

//-----------------------------
void __fastcall Form1::FuncFileJob(AnsiString & FileName)
{
' if(FileExists(FileName))
' {
' //нечто делаем
' }
' else
' ShowMessage(AnsiString("Error file name: ")+FileName);
}

Удачи.
Вернуться к началу
ChaynikSoft
Гость





СообщениеДобавлено: Сб Май 25 2002 20:22    Заголовок сообщения: Re: Правильно ли понял? Ответить с цитатой

устанавливаю переменные
AnsiString a1=Edit1->Text,a2=Edit2->Text,a3=Edit3->Text;


>>//на клике кнопки
>>void __fastcall Form1::BtnFileJobClick(TSender*)
Тут просто просто проверяем отмеченные птички
и при каждом true передаем переменную в процедуру >>void __fastcall Form1::FuncFileJob(AnsiString & FileName)


Написать блок, так как Вы написали
>>//-----------------------------
>>void __fastcall Form1::FuncFileJob(AnsiString & FileName)
>>{
>>' if(FileExists(FileName))
>>' {
>>' //нечто делаем
>>' }
>>' else
>>' ShowMessage(AnsiString("Error file name: ")+FileName);
>>}

Вопросы:
После отрабтки процедуры как она вернеться опять проверять птички.
Честно, говоря ничего не понял!
Вернуться к началу
Adil
Гость





СообщениеДобавлено: Вс Май 26 2002 11:30    Заголовок сообщения: Re: Правильно ли понял? Ответить с цитатой

Боюсь, Вам все-таки придется прочесть хоть какую-нибудь книжку по программированию.

Что касается вызова функции.
В любом процессоре есть специальная ячейка памяти (т.н. IP регистр), в которой храниться место в памяти компьютера (т.н. адрес), где описана следубщая команда процессору(т.е. которая будет выполнятьcя после завершения текущей команды). Поменять насильно значение в этом регистре нельзя. Обычно значение в нем изменяется очень грубо говоря на "1", т.е. команды выполняются последовательно одна за другой. Но есть команды, например, "GO TO ххх" или вызов функции, которые изменяют значение в этом регистре по-другому.
Команда "GO TO ххх" просто заносит в этот регистр место (адрес) той команды, которая лежит по метке "ххх". При вызове же функции делается то же самое, но при этом запоминается место (адрес) той команды, которая выполнялась, если бы вызова не было (т.е. откуда произошел вызов). После того, как функция завершит свою работу без ошибок, этот адрес кладется обратно в IP, и таким образом процессор возвращается обратно.

Давай...те для наглядности считать, что адрес команды - это номер строки в Вашем коде. Это конечно, не так, но очень похоже по смыслу.
Пусть где-то в коде в строке № 1001 Вы вызываете некую ф-цию:

1000: a="aaa";
1001: FileJob1(...);
1002: b="bbb";

а сама функция FileJob1 лежит где-то на 2000 строке:

2000: FileJob(...)
2001: {
2002: //...
2003: }

Пусть в данный момент Вы находитесь на строке 1000 (значение IP == 1001)
Поцессор выполняет присваивание a="aaa" и выполняет вызов функции: "прыгает" на строку 2000 - имя функции говорит, куда ему прыгать) и при этом запоминает, куда он должен вернуться (на строку после вызова - 1002: b="bbb"). После того, как процессор "пробежиться" по строкам 2001, 2002 и 2003, он достанет из памяти номер строки, куда он должен вернуться (1002) и прыгнет на эту строку. Если бы на 1002 строке находился бы вызов другой функции, ех.
1002: FileJob2(...);
то процессор вернулся бы на эту строку, запомнил бы адрес следующей строки (1003) и прыгнул бы на строку, где находиться сама
FileJob2(...)
{
}
и т.д.
Вот так, очень примитивно и грубо работает вызов функции - в двух словах при вызове функции процессор выполняет ее и возвращается обратно в место вызова. Попробуйте пробежаться отладчиком по Вашему коду - Вы это наглядно увидите.

А книжку прочитать обязательно надо!

Удачи.
Вернуться к началу
ChaynikSoft
Гость





СообщениеДобавлено: Вс Май 26 2002 18:34    Заголовок сообщения: Re: Правильно ли понял? Ответить с цитатой

Огромное спасибо за помощь, и терпение.
Я читал книжку "С++Builder 5.0. Архангельского", но думаю что нужно другую. Так как в ней описывался язык и работа с программой С++В.
Какую посоветуете попонятней.
Спасибо за помощь.
Вернуться к началу
Adil
Гость





СообщениеДобавлено: Пн Май 27 2002 12:35    Заголовок сообщения: Re: Правильно ли понял? Ответить с цитатой

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

Удачи.
Вернуться к началу
ChaynikSoft
Гость





СообщениеДобавлено: Пн Май 27 2002 13:55    Заголовок сообщения: Ответ на: "Re: Правильно ли понял?- Adil- 27-05-2002 13:35" СПАСИБО! Ответить с цитатой

Огромное спасибо.
Вернуться к началу
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...