| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Нужно узнать количество строк... |
| Автор: drZmeu 24.1.2007, 09:37 | ||
| Возникла проблема... Все наверное знают как кодируется base64 кто незнает сейчас расскажу =) в принцепе неважно как это всё кодируется но допустим есть файл в нём 17 строк по 76 символов и одна строка около 16 символов. Вот мне нужно както передать всё это дело по SMTP но чтоб размер после передачи файла не изменился... Я пытался вчера один рас размер файла вышел такой какой нужно... Но пришлосб в ручную считать строки и указывать сколько их. После я попытался читать файл по символам... Зазмер увеличился на несколько байт может это и неочень страшно но файл при постоянной передаче будет постоянно расти а это не есть хорошо =\ Вопрос как средствами WinAPI в среде Visual C++ узнать сколько строк в файле ? Точнее мне както нужно узнать сколько там строк а после прочитать каждую строку по 76 символов... Я пытался парсировать таким методом:
Вот примерно так я и читал + пытался по 2 символа. + SetFilePointer Вобшем много чего пытался... Не очень получилось... Вопрос как узнать сколько в файле строк желательно средствами WinAPI + ReadFile. |
| Автор: szz 24.1.2007, 10:32 |
| Кажется это одно из первых заданий в КерниганРичиЯзыкПрограммированияСи |
| Автор: drZmeu 24.1.2007, 10:43 |
| На сколько я помню там чистый C++ Мне нужен минимальный размер и максимальная производительность =\ В проекте Используется немного C + WinAPI + ASM |
| Автор: drZmeu 24.1.2007, 14:39 |
| вопрос остаётся не решонным. |
| Автор: W4FhLF 24.1.2007, 14:45 |
| Что конкретно тебя интересует? Сам алгоритм определения числа строк или его реализация вкупе с WinApi? Обычный поиск всех символов переноса строки(0x0A) вполне подойдёт, есть конечно и более эффективные алгоритмы, но и при простом поиске символа переноса производительность определяется миллионами строк за 1/2 секунды, примерно. |
| Автор: drZmeu 24.1.2007, 16:35 |
| Тоесть использовать метод парсинга который использовал я но указывать 0x0D и 0x0A.. Если нет то можно примерчик плзззз... |
| Автор: W4FhLF 24.1.2007, 17:01 |
| Ну ты искал строки '13' '10', а надо искать числовые значения(коды символов). 0x0A - это 10 в шестадцатиричном представлении, ну стыдно такое не знать программисту. Если у тебя большой файл(> 30-40 мегабайт) читай блоками по 4096 байт или скидывай файл в своп(Memory Mapped Files) и ищи в них байты со значением 10. Вот и весь алгоритм. |
| Автор: drZmeu 24.1.2007, 17:07 | ||||
| Мда....... Мне бы с использованием ReadFile + я знаю что такое HEX... Добавлено @ 17:19 Ок вопрос №2... Почему когда я читаю файл примерно вот так: [code=cpp] DWORD iByte; char buf[1]; HANDLE THREAD; for(DWORD i=0;i<fsize;i++) { SetFilePointer(THREAD,i,0,NULL); ReadFile(THREAD,buf,1,&iByte,NULL); send(s,buf,strlen(buf),0);
Получается такая тема что в файле до кодирования в base64 всё ок. после передачи файла... Он перекодируется автоматом в нормальный вид: у меня получается какоето смешение мне кажется я передаю немного лишней информации... + файл увеличивуается на несколько байт =\ Добавлено @ 17:20 Блин =(
|
| Автор: W4FhLF 24.1.2007, 17:31 | ||
Вот тебе код, который считает кол-во строк в файле, реализовано всё на WinApi.
|
| Автор: drZmeu 24.1.2007, 17:49 |
| Во пасибо большое |