Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Сортировка в файле

Ответить
Настройки темы
C/C++ - Сортировка в файле

Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


Как осущесвялется сортировка в файлах и поиск.
пример.
ФАйла в одной строке одно слова.
Расортировать их по алфавиту и разбить на файлы по кол-ву букв.

Отправлено: 11:39, 09-07-2008

 

Ветеран


Сообщения: 3320
Благодарности: 916

Профиль | Отправить PM | Цитировать


Цитата DENoszone:
'CharToOemW' ... 'CreateFileW' ... 'MessageBoxW' »
А где оно в теме встречалось?
Стоит попробовать не подлежащие конвертации параметры в кавычки и L перед ними, например так L"C:\\Boot.ini" если указывать напрямую имя файла без использования переменной.
Или прикрутить функцию MultiByteToWideChar

Цитата DENoszone:
hFile=CreateFile(d,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL) »
Этот код означает что переменной hFile присваивается значения функции CreateFile которой передаются указанные в скобках параметры.
Можно записать и строчкой, но для функций с большим количеством передаваемых параметров предложенный вариант смотрится куда лучше.

Опечатка это, string хотели написать, но его нету в С, максимум в этом направлении char *

!bResult отрицание этой переменной, читается как "Не bResult".
Это сообщение посчитали полезным следующие участники:

Отправлено: 14:37, 14-07-2008 | #21



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 1404
Благодарности: 135

Профиль | Отправить PM | Цитировать


Хорошая ошибка.
Первый вариант : заточить код под Unicode, я этого не умею - все упирается в константные указатели (я еще не совсем понимаю, как с ними работать, как "поместить" строку с неизвестной длиной в константный указатель на строку), в моем проекте указатели неконстантные.
Второй вариант: Project - Properties - General - Character Set - поставить Not set
Третий вариант: вместо CreateFile, MessageBox, CharToOem явно указать CreateFileA, MessageBoxA, CharToOemA

find это моя пользовательская функция. Про strng, пользовательский тип данных я все объяснил выше.

По поводу hFile=CreateFile сюда http://msdn.microsoft.com/en-us/library/aa363858.aspx

Цитата:
!bResult
Описание функции:
BOOL ReadFile( HANDLE hFile, LPVOID lpBuffer, DWORD nNumberOfBytesToRead, LPDWORD lpNumberOfBytesRead, LPOVERLAPPED lpOverlapped
);
ReadFile возвращается значение типа BOOL

Значение, возвращенное функцией было помещено в переменную bResult. Мы не знаем, что туда было помещено. Чтобы предпринять какие-то действия в зависимости от того, что в этой епременной, мы используем условный оператор if

Синтаксис условного оператора

IF ( ПРОВЕРОЧНОЕ_ВЫРАЖЕНИЕ)
ДЕЙСТВИЕ

Проверочное выражение/ условное выражение - выражение которое при выполнении оказывается либо 1, либо 0.
Действие выполняется, если в проверочном выражении оказывается 1

IF ( ПРОВЕРОЧНОЕ_ВЫРАЖЕНИЕ)
ДЕЙСТВИЕ 1
ELSE
ДЕЙСТВИЕ 2

Действие 1 выполняется, если в условном выражении оказывается 1
Действие 2 выполняется, если в условном выражении оказывается 0

В условном выражении может понадобится проверить несколько операторов.

Булева алгебра:
ЛОГИЧЕСКОЕ И "возвращает" 1, если все выражение входящие в И истинны, и 0 в противном случае
ЛОГИЧЕСКОЕ ИЛИ "возвращает" 1, если хотя бы одно из выражений входящих в ИЛИ истинно, и 0, если все выражения ложны
ЛОГИЧЕСКОЕ НЕТ "возвращает" 1, если в выражении 0. Возвращает 0, если в выражении 1.

ЛОГИЧЕСКОЕ И в языке С обозначается &&
ЛОГИЧЕСКОЕ ИЛИ в языке С обозначается ||
ЛОГИЧЕСКОЕ НЕТ в языке С обозначается !

Код: Выделить весь код
if(!bResult) {
Msg("Невозможно прочитать файл!"); //Если в bResult оказалась 1
}
else
{			
find(t, (int)fzi, 10,3); //Если в bResult оказалась 0
}
bResult может принять значение либо не 0, либо 0
Если в bResult оказался 0, то это означает что прочитать из файла не удалось
Если в bResult оказался не 0, то это означает что прочитать из файла удалось
(См что может вернуть функция Read File
Код: Выделить весь код
Nonzero indicates success. Zero indicates failure.
ЛОГИЧЕСКОЕ НЕТ (!bResult) меняет значение bResult на противоположное: 1 на 0, 0 на 1.

Таким образом если в bResult оказался 0, то !bResult означает 1
Таким образом если в bResult оказался не 0, то !bResult означает 0
Если !bResult != 0, то выполняется Msg("Невозможно прочитать файл!");
Если !bResult == 0, то выполняется find(t, (int)fzi, 10,3);

По другому условное выражение можно переписать так

Цитата:
if (bResult !=0)
{
find(t, (int)fzi, 10,3);
}
else
{
Msg("Невозможно прочитать файл!");
}

-------
Ehhh.. what's up, doc?..

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:20, 14-07-2008 | #22


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


не знаю...вообще тут все как то сильно накручено.
попробую сам написать.
единственое что обьясните.
пройтись по всему файлу и запиать в масив.дальше я уже что то добавлю сам.

Отправлено: 10:56, 15-07-2008 | #23


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


Откраваешь файл для чтения и записи, измеряешь размер фаула, создаешь динамический массив таккого размеры, читаеешь туды весь фаул, сортируешь массив, ставишь указатель на начало фаула и сбрасываешь туда весь массив. В результате файл содержит упорядоченные данные.

Отправлено: 12:40, 15-07-2008 | #24


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
	while((ch=fgetc(login_txt)) != '\n') 
{
if (login==ch)
{
	cout<<"good";
}
}
как запихнуть в цикл что бы оно так каждую строчку проходило?

Отправлено: 14:09, 15-07-2008 | #25


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


надо '\n' заменить на EOF

Отправлено: 14:56, 15-07-2008 | #26


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


прекрасно...только мне надо что бы был первый цикл проверял EOF если нет..то заходил во второй и там записывал до '\n'

Отправлено: 15:39, 15-07-2008 | #27


Новый участник


Сообщения: 30
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата DENoszone:
если нет.. »
Что значит если нет?
EOF всегда есть! EndOfFile

Отправлено: 15:50, 15-07-2008 | #28


Пользователь


Сообщения: 147
Благодарности: 0

Профиль | Отправить PM | Цитировать


Алгоритм:
Записывает по символьно...до '\n' проверяет является это равно другой переменной.
если не равняеся то переход в следущую строчку...и так далее до EOF

Отправлено: 10:52, 16-07-2008 | #29



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Сортировка в файле

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Сортировка файлов kt626 Скриптовые языки администрирования Windows 2 28-03-2009 10:47
Сортировка... skeletor Хочу все знать 14 16-03-2007 18:32
Сортировка в Exсel Evita Хочу все знать 2 11-01-2006 14:24
Многофазная сортировка mask Программирование и базы данных 1 04-06-2003 23:40
Быстрая сортировка noname00.pas Программирование и базы данных 12 04-03-2002 17:32




 
Переход