Форум программистов, компьютерный форум CyberForum.ru

Заменить строки массивом массивов чаров - C++

Восстановить пароль Регистрация
 
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
12.12.2012, 17:33     Заменить строки массивом массивов чаров #1
Подразумевается создание массива строк, а точнее - массива массивов чаров, чтобы сделать код расширяемым в будущем. Смысл кода в том, что робот управляется путём создания в определённом каталоге файлов, имена которых являются командами. Робот файл удаляет, команду выполняет и всё повторяется сначала. Что ещё посоветуете?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
const char* goAhead = "C:\\my_robot\\GOAHEAD";
const char* turnLeft = "C:\\my_robot\\TURNLEFT";
const char* turnRight = "C:\\my_robot\\TURNRGHT";
 
bool FileExists(const char* fname) {
    return ::GetFileAttributesA(fname) != DWORD(-1);
}
 
bool DelFile(const char* fname) {
    if( FileExists(fname) ){
        while( ::DeleteFileA(fname) == 0 )  Sleep(100);
        return true;
    }
    return false;
}
 
int GetOrder() {
    if ( FileExists(goAhead) )  return 1;
    if ( FileExists(turnLeft) )  return 2;
    if ( FileExists(turnRight) )  return 3;
    return 0;
}
 
bool DelOrder() {
    return ( DelFile(goAhead) || DelFile(turnLeft) || DelFile(turnRight) );
}
 
int WaitOrder() {
    int Order;
    do {
        Sleep(100);
        Order = GetOrder();
    } while ( Order == 0 );
    if ( DelOrder() )   return Order;
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
12.12.2012, 17:44     Заменить строки массивом массивов чаров #2
Класс std::string не подходит вместо массива строк Си?
И непонятно, зачем ковыряться с названиями файлов? Выходит, что две одинаковые команды он выполнить не может. Не проще сделать один фаил и уже из него считывать последовательность команд?
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
12.12.2012, 18:52  [ТС]     Заменить строки массивом массивов чаров #3
Цитата Сообщение от Croessmah Посмотреть сообщение
Класс std::string не подходит вместо массива строк Си?
Мне бы не хотелось использовать дополнительные классы без крайней нужды. Честно говоря, и так сойдёт, как есть, но всё же хотелось бы чуть поумнее организовать это всё. Например, чтобы перебирать команды/файлы в цикле.

И непонятно, зачем ковыряться с названиями файлов? Выходит, что две одинаковые команды он выполнить не может. Не проще сделать один фаил и уже из него считывать последовательность команд?
Не имеет смысла. Команды подаются по одной. Потом файл стирается и прога ждёт следующую команду. По некоторым причинам мне так удобнее. К тому же проверка существования файла гораздо проще и быстрее, чем чтение из него.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
15.12.2012, 18:10     Заменить строки массивом массивов чаров #4
Цитата Сообщение от Vtulhu Посмотреть сообщение
Не имеет смысла. Команды подаются по одной. Потом файл стирается и прога ждёт следующую команду. По некоторым причинам мне так удобнее.
Другими словами, одновременно в данной папке не может находится две одинаковые команды. Значит в одно время, одна подпрограмма проверяет есть ли фаил, выполняет команду, удаляет фаил, вторая - как-то генерирует команды и создает файлы?
Цитата Сообщение от Vtulhu Посмотреть сообщение
К тому же проверка существования файла гораздо проще и быстрее, чем чтение из него.
Очень, очень сомнительно.
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
17.12.2012, 11:32  [ТС]     Заменить строки массивом массивов чаров #5
Цитата Сообщение от Croessmah Посмотреть сообщение
Другими словами, одновременно в данной папке не может находится две одинаковые команды.
И две разные - тоже не могут. Специфика всего процесса такова, что эти ситуации невозможны и бессмысленны.

Значит в одно время, одна подпрограмма проверяет есть ли фаил, выполняет команду, удаляет фаил, вторая - как-то генерирует команды и создает файлы?
Всё правильно, за исключением того, что это не две подпрограммы, а две программы, причём на разных языках. И даже исполнение программ очень разное (DLL и скрипт). Этим и объясняется межпроцессное взаимодействие через файлы.

Очень, очень сомнительно.
Вы хотите сказать, что WinApi-функция GetFileAttributes исполняется дольше, чем цикл fopen-fgets-fclose? Да и в любом случае, даже если дольше, то вызвать одну функцию проще, чем огород городить с чтением, парсингом и т.д.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
19.12.2012, 09:43     Заменить строки массивом массивов чаров #6
Цитата Сообщение от Vtulhu Посмотреть сообщение
чем цикл fopen-fgets-fclose?
в цикле будет только считывание строки из файла, а открытие и закрытие будет единожды.
Цитата Сообщение от Vtulhu Посмотреть сообщение
что WinApi-функция GetFileAttributes исполняется дольше
Проверьте в цикле.
Цитата Сообщение от Vtulhu Посмотреть сообщение
то вызвать одну функцию проще, чем огород городить с чтением
никто не мешает написать свою функцию и вызывать её. Думаете, что GetFileAttributes очень просто устроен?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2012, 12:55     Заменить строки массивом массивов чаров
Еще ссылки по теме:

C++ Использование массивов заменить использованием указателей в приведенном коде
C++ Считывание чаров из cin происходит не корректно
Умножение массива чаров C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Vtulhu
369 / 375 / 96
Регистрация: 12.08.2011
Сообщений: 1,610
19.12.2012, 12:55  [ТС]     Заменить строки массивом массивов чаров #7
Цитата Сообщение от Croessmah Посмотреть сообщение
в цикле будет только считывание строки из файла, а открытие и закрытие будет единожды.
Я имел в виду всю последовательность fopen-fgets-fclose, не зацикливание в "программистском" смысле этого слова.

никто не мешает написать свою функцию и вызывать её. Думаете, что GetFileAttributes очень просто устроен?
Вы заставили меня задуматься... А как проверить существование файла с помощью fopen? А что касается своей функции, то у меня так и сделано, просто она состоит из одной строчки return (GetFileAttributes(fname) != DWORD(-1));
Yandex
Объявления
19.12.2012, 12:55     Заменить строки массивом массивов чаров
Ответ Создать тему
Опции темы

Текущее время: 00:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru