Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Информационный Канал Subscribe.Ru


RusFAQ.ru: Программирование на C / C++

Выпуск № 444
от 17.01.2004, 23:30

Администратор:
Имя: Nick.Box
URL: Информационный ресурс
ICQ: 365124
[censored], [censored]
О рассылке:
Задано вопросов: 1401
Отправлено ответов: 2958
Активность: 211.1 %
[Задать вопрос >>][Регистрация эксперта >>]
[Поиск в базе][Обсудить на форуме]


 Список экспертов, ответы которых опубликованы в данном выпуске

vitya
Статус: Профессиональный
Общий рейтинг: 108.42
[Подробней >>]
chebv
Статус: Доверительный
Общий рейтинг: 114.46
[Подробней >>]
Andrew Vext
Статус: Профессиональный
Общий рейтинг: 103.47
[Подробней >>]
 
Avl2k
Статус: Профессиональный
Общий рейтинг: 124.51
[Подробней >>]


 Краткий перечень вопросов

Вопрос № 1390. Доброго вам времени суток! Как из текстого файла (100 килограмм до полуметра) можно считать строку т... (ответов: 4)

Вопросов: 1, ответов: 4


 Вопрос № 1390

Доброго вам времени суток!
Как из текстого файла (100 килограмм до полуметра) можно считать строку такого типа (HEX):
... 12 23 5F 00 00 00 ED 08 00 00 .... (не важно)
fgets() доходит до 00 - и всё, для сишника это вся строка. Фигня в том, что в этой строке потом придётся изменить пару-тройку байтиков и положить на место.
Была мысля заменить все эти нули (кроме последнего) пробелами - но потом, когда надо переходить обратно к тому, что было, на нули поменяются и все изначальные пробелы :(
Может, я гоню??? и есть какая-то более нормальная функция, что-нибудь не из области ASCIIZ...
Заранее благодарен.


Приложение:


Вопрос отправлен: 13.01.2004, 23:23
Отправитель: Ренат (renatka_f@mail.ru)

[Следующий вопрос >>] [Список вопросов]

Отвечает vitya

Приветствую Вас, Ренат!
1. Раз там есть нули, то это уже не текстовый файл.
2. Используй отображаемые в память файлы - CreateFileMapping/MapViewOfFile. Если не знаком не бойся, весь файл в ОЗУ не подкинет, а закинет пару страниц.
3. Дальше или можешь просто бежать по массиву в поисках первого байта, или можешь применить какой - нибудь более умный алгоритм поиска.
4. нужные байты заменяются в данном случае элементарно. Просто по найденым ибндексам пишешь новые данные

Ответ отправлен: 14.01.2004, 08:36
Отправитель: vitya


Отвечает chebv

Здравствуйте, Ренат!


Ответ отправлен: 14.01.2004, 08:38
Отправитель: chebv


Отвечает Andrew Vext

Доброе время суток, Ренат!
Создаете массив unsigned char и читаете в него по одному символу в цикле функцией fgetc
Никаких MFC и API только стандартный stdio.h

Приложение:

Ответ отправлен: 14.01.2004, 10:40
Отправитель: Andrew Vext


Отвечает Avl2k

Здравствуйте, Ренат!
В этом нет никакой проблемы, если пользоваться не строковыми функциями, а функциями работы с буфером fread и fwrite. Пример замены нулей в первых 25 байтах файла на 'X':
void f()
{
FILE* f = fopen( "test.wav", "r+b" );
if( f )
{
typedef unsigned char u_char;
u_char buf[25];
size_t count = fread( buf, 1, sizeof( buf ), f );
if( count == sizeof( buf ) )
{
int repl = 0;
for(;;)
{
u_char* pos = (u_char*)memchr( buf, 0, count );
if( !pos )
break;
*pos = 'X';
++repl;
}
if( repl > 0 )
{
rewind( f );
fwrite( buf, 1, count, f );
}
printf( "replaced %d bytes\n", repl );
}
fclose( f );
}
}
С уважением, Avl2k.


Ответ отправлен: 16.01.2004, 11:16
Отправитель: Avl2k



Форма отправки вопроса

Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+ или отправлять вопросы с сайта по адресу: http://rusfaq.ru/cgi-bin/Message.cgi.

(C) 2002-2003 Команда RusFAQ.ru.

 Персональные данные

Ваше имя:

Ваш e-mail:

Опубликовать мой e-mail в рассылке


 Вопрос и дополнение

Ваш вопрос:


Приложение (если необходимо):


Получить ответов:


 Выбор рассылки

Программисту
Assembler (24)
C / C++ (17)
Perl (4)
Builder / Delphi (18)
Pascal (19)
Basic / VBA (5)
Java / JavaScript (5)
PHP (13)
Криптография (5)
WinAPI (12)
Пользователю
Windows 95/98/Me (40)
Windows NT/2000/XP (58)
"Железо" (30)
Поиск информации (20)
Администратору
Windows NT/2000/XP (28)
Linux / Unix (10)
Юристу
Гражданское право (14)
Семейное право (10)
Трудовое право (11)
КоАП (10)

Отправить вопрос всем экспертам выбранной рассылки.




Задать вопрос | Регистрация эксперта | Поиск в базе | Чат | Форумы | Новости
Проект экспертов RusFAQ.ru | Фотоальбом | Virus.RusFAQ.ru | Администрирование
Профессиональная WEB-Студия B.I.T.


Яндекс цитирования
© 2001-2004 Россия, Москва. Авторское право: Калашников О.А.

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное