Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Сб Июл 15 2006 10:19 Заголовок сообщения: [C++] Глупый вопрос |
|
|
Для начала...
Тут случайно нет какогонибуть раздела для новичков? А то у меня ещо будет куча глупых вопросов
Да и вобще неплохо было бы литературой ещо затарится, начал я учить C++ сравнительно недавно и у меня книг пока маловато...
Тут гдето точно должна быть тема с ссылками на литературу, правдо поиском я её на нашол.
Итак вопрос:
Для тренировки пишу прогу для страшно тупой задачи Она должна открывать текстовый файлик делать из него копию в которой должна удалить все буквы а цыфры оставить. Она вроди как работает но со своими граблями... Вопервых проц вовремя работы занят не больше чем на 50%, вовторых сильно большые файлики хавать не хочет Думал что она его просто долго обрабатывает, потому сделал прогрессбар для сличением за процессом и всёравно маленькие файли (гдето до 100 строчек) хавает а на большых виснет.
Великим и страшным програмерам
Прошу не матирится на пост, и не посылать меня на...
google.com
был я там - нечего интересного
если вам чтото не нравится можно меня просто игнорировать! |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Вс Июл 16 2006 00:55 Заголовок сообщения: |
|
|
Было бы нравственно указать:
1. ОС
2. Среда разработки и компилятор
3. Способ которым Вы открываете файл
Лично у меня проблем с файлами меньше 2Гб не возникало никогда...
Литература:
Страуструп, а вот названия не помню. Можно найти в интете на Русском языке. Еще, я бы рекомендовал Герберта Шилда(Шилдта) почитать. _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Вс Июл 16 2006 11:41 Заголовок сообщения: |
|
|
Kefir писал(а): | Было бы нравственно указать:
1. ОС
|
WinXP
Kefir писал(а): |
2. Среда разработки и компилятор
|
Визуал студио
Kefir писал(а): |
3. Способ которым Вы открываете файл
|
Тут я не понял. Я конечно извиняюсь за свое невежество, просто я не сильно давно сел за С++ и непонимаю в чом вопрос?
Могу подкинуть мой код, но подозреваю без пива его некто смотрет не будет |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Вс Июл 16 2006 12:23 Заголовок сообщения: |
|
|
Можно открывать файл с помощью:
1. UNIX-подобной системы ввода/вывода (open,read,write)
2. Стандартной библиотеки ввода/вывода Си (fopen,fprintf,fscanf)
3. Библиотки ввода/вывода Си++ (iostream)
и т.д.
Приводите код, разберемся... _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
kolobok0
Зарегистрирован: 22.04.2005 Сообщения: 253 Откуда: Мсква
|
Добавлено: Пн Июл 17 2006 14:50 Заголовок сообщения: |
|
|
ZiGi писал(а): | Тут я не понял... |
если Вы собрались далеко и на долго в программирование, и одна из Ваших платформ будет форточки(Win32) - то рекомендую поискать и купить (можно просто в инете) книги...
1) Круглинский
"Использование VC++ MFC" (название не точно).
Не плохо дан пласт MFC
2) Джэф Элджер "C++"
Не плохие приёмы программирования...
3) Рихтер
"Windows для проффесионалов"
Толково и обстоятельно про форточки.
4) Г.Буч
"Объектно-Ориентированный Анализ и Проектирование"
Альма матер по ООП. Ответит на вопрос какие и когда создавать классы. С точки зрения минимизации Ваших затрат.
5) страуструпа (тут уже прозвучало)...
Ну это математически-программный фундамент.
с уважением
(круглый) |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Пн Июл 17 2006 22:26 Заголовок сообщения: |
|
|
Сперва надо научиться программировать вообще, а потом форточки... _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Вт Июл 18 2006 08:30 Заголовок сообщения: |
|
|
Kefir писал(а): | Сперва надо научиться программировать вообще, а потом форточки... |
Да! Стопудова Кефир прав.
Но закниги спасибо!
Kefir писал(а): |
1. UNIX-подобной системы ввода/вывода (open,read,write)
|
Я именно так делаю. |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Вт Июл 18 2006 10:01 Заголовок сообщения: |
|
|
Ну дк листинг то дай!!! Так мы те ниче не посоветуем... _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Ср Июл 19 2006 13:23 Заголовок сообщения: |
|
|
Ну завтыкал малость....
Код: |
void COScleanDlg::OpenF(CString PathName)
{
CFile OFile;
if (OFile.Open(PathName, CFile::modeRead))
{
int FileLength=OFile.GetLength();
char *Buffer=new char [FileLength+1];
try
{
OFile.Read(Buffer, FileLength);
}
catch (CFileException *e)
{
e->Delete();
delete [] Buffer;
return;
}
Buffer[FileLength]=0;
m_sFileDATA=Buffer;
}
CString FileName=OFile.GetFileTitle();
OFile.Close();
m_Progress.SetRange(0,100);
m_Progress.SetPos(0);
int n=1, step=abs(m_sFileDATA.GetLength()/100);
for(int i=0;i<m_sFileDATA.GetLength();i++)
{
if (i>=(step*n))
{
m_Progress.SetPos(n);
n++;
}
CString sTempD=m_sFileDATA.GetAt(i);
if(sTempD==".")
{
m_sFileDATA.Delete(i);
}
if(!iswdigit(m_sFileDATA.GetAt(i)))
{
m_sFileDATA.Replace(sTempD, " ");
}
}
}
|
Хотел было прикрепить весь файлик но что-то ненайду как. Тут что нельзя файли прикреплять |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Ср Июл 19 2006 18:08 Заголовок сообщения: |
|
|
Как все мудрено!!!
Короче:
1. Нах длину файла узнавать? И пытаться засунуть его целиком в память?
2. Делаем буфер фиксированного размера и считываем из потока ассоциированного с первым файлом нужное количество байтов. Обрабатываем и пишем в поток ассоциированный со вторым файлом. Потом еще раз... И еще... Так пока файл не кончится... ВНИМАНИЕ!!! Необходимо обрабатывать ситуацию, в которой количество считанных байтов будет меньше размера буфера. _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Ср Июл 19 2006 19:44 Заголовок сообщения: |
|
|
Kefir писал(а): |
2. Делаем буфер фиксированного размера и считываем из потока ассоциированного с первым файлом нужное количество байтов. Обрабатываем и пишем в поток ассоциированный со вторым файлом. |
Может мой вопрос покажется вам несколько глуповатым (как и все остальные ) но что имеется в виду под словом поток? И примерчик пожалуйста (правда я совсем обнаглел ). |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Ср Июл 19 2006 20:30 Заголовок сообщения: |
|
|
RTFM _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Чт Июл 20 2006 08:23 Заголовок сообщения: |
|
|
Какие вы все пипец умные! Проще всего сказать RTFM. А нах тогда вобще форумы? Если на либой вопрос можна так ответить...
И то если бы вы сказали где его взять, а так любой встречный-поперечный ответить может!!! Я же ещо в первом посте писал, нечего сказать - молчите, я же не персонально к вам обращаюсь, может найдётся какойнибуть нормальный человек который не считает для себя оскорбительным обяснить новичку чтонибуть элементарное. |
|
Вернуться к началу |
|
|
Kefir
Зарегистрирован: 16.04.2005 Сообщения: 443 Откуда: Пермь
|
Добавлено: Чт Июл 20 2006 12:01 Заголовок сообщения: |
|
|
Набор в гугле: "Учебник по Си++" и скачивание оного занимает менее 2х минут. А форумы существуют для обсуждений нетривиальных вопросов, ответов на которые в документации найти невозможно. _________________ Самоловских Виталий aka Kefir |
|
Вернуться к началу |
|
|
Andy-C
Зарегистрирован: 09.12.2003 Сообщения: 73 Откуда: Нальчик
|
Добавлено: Чт Июл 20 2006 13:01 Заголовок сообщения: |
|
|
ИМХО Если пользуете С++, кошерней использовать потоки (stream).
Код: | #include <iostream> //потоки
#include <locale>//локаль. В том числе и, что есть цифра ...
int main(int argc, char* argv[])
{
char ch;
//Пока не кончился входной поток
while(std::cin)
{
// Читать по буковке
std::cin>>ch;
//Если буковка это "цыфирька"
if(std::isdigit(ch))
//Пихать буковку в стандартный вывод.
std::cout<<ch;
}
return 0;
}
|
Не рационально читать по одному символу, но: проще, прозрачней, и чтение , всётаки, буферезированное.
С++ это не С! Лучше взять учебник по с++, не обязательно свежий.
http://www.natahaus.ru есть и папа с++ _________________ До onlina Andrew C. |
|
Вернуться к началу |
|
|
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Сб Июл 22 2006 09:05 Заголовок сообщения: |
|
|
Ладно, ну допустим с вводом разобрались...
А что с загрузкой процесора? Когда я запскаю програмулину она хавает ровно 50% проца и не процентом больше. Тут что какоето ограничение? Есделал біло два потока - хавает 100% и всё бы ничего но теперь из-за потоков незнаю как реализовать прогрессбар. Подскажыте. |
|
Вернуться к началу |
|
|
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Вс Авг 20 2006 10:33 Заголовок сообщения: |
|
|
Вроди робатает моя програмина, но всёравно както криво
Сделал я там второй поток. Но теперь после обработки он не хочет отдавать данные котореы отобрал Я толком не могу разобратся как они передаются между потоками. Помогите мне... |
|
Вернуться к началу |
|
|
ZiGi
Зарегистрирован: 15.07.2006 Сообщения: 11
|
Добавлено: Ср Авг 23 2006 14:15 Заголовок сообщения: |
|
|
Вроди и с этими граблями разобрался. Правда чисто методом научного тыка. Есть ещо проблемка... Когда прога начинает обрабатывать данные и по её окну ткнуть мышю или просто убрать с него фокус прога перестаёт отвечать до завершения обработки. Что мнея делать?
З. Ы. Вам не кажется что этот топик становится похож на записки психически-больного который любит поразговаривать сам с собой? Что некто незнает ответов на мои вопросы? |
|
Вернуться к началу |
|
|
|