Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
 Аватар для Vovik_0_1
40 / 40 / 6
Регистрация: 28.07.2011
Сообщений: 431

Прогрессбар для цикла

29.06.2012, 00:50. Показов 5507. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как добавить для цикла прогресс бар? Цикл берёт два документа log and log2 смотрит есть ли изменения в log2 если есть выводит их.. Но если в файлах много строк то программа зависает на неопределённое количество времени.. Можно как нить прогресс баром показать процесс анализа?

Добавлено через 54 секунды
Ой цикл забыл
C++
1
2
3
4
5
6
7
8
9
10
   TStringList*s=new TStringList;
   TStringList*s2=new TStringList;
   s->LoadFromFile("log.ant") ;
   s2->LoadFromFile("log2.ant");
   for (int i=0;i<s2->Count;i++)
   {     for (int q=0;q<s->Count;q++){
      if (s2->Strings[i] == s->Strings[q]) break;
      else if (q == s->Count-1) Memo1->Lines->Add(s2->Strings[i]);
    }
   }
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.06.2012, 00:50
Ответы с готовыми решениями:

Самодельный прогрессбар
Написал очень простой прогрессбар, хотелось бы услышать мнение народа по этому поводу... #pragma resource &quot;*.dfm&quot; TForm1...

Прогрессбар на основе TImage
Мне понадобился супер-точный Прогрессбар. Решил написать его самостоятельно на основе TImage. Может кому-нибудь пригодится Unit1.h:...

Массив из миллиона элементов. Прогрессбар. Кнопка выхода из цикла. Application.ProcessMessages
Доброго времени суток. Нужна помощь. Дан одномерный целочисленный массив из миллиона элементов. Его нужно отсортировать. ...

35
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 01:33
Vovik_0_1, честно говоря, с ПрогрессБаром ни разу не связывался, но вот так вот работать не будет?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    TStringList*s = new TStringList;
    TStringList*s2 = new TStringList;
    s->LoadFromFile("log.ant");
    s2->LoadFromFile("log2.ant");
    ProgressBar1->Step = 1;
    ProgressBar1->Max = s->Count;
    for (int i = 0; i < s2->Count; i++) {
        for (int q = 0; q < s->Count; q++) {
            if (s2->Strings[i] == s->Strings[q])
                break;
            else if (q == s->Count - 1)
                Memo1->Lines->Add(s2->Strings[i]);
            this->ProgressBar1->StepIt(); //не уверен, что эта строка на нужном месте
        }
    }
Не, это неправильно

Добавлено через 15 минут
Я бы, пожалуй, изменил максимальное значение все-таки на вот такое:
C++
1
ProgressBar1->Max = s->Count * s2->Count;
Протестируйте, пожалуйста.

Хотя мне кажется, что во время подвисания Бар, наверное, нифига показывать не будет...
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 01:43
C++
1
2
3
4
5
ProgressBar1->Position=0;
ProgressBar1->Max= // кол_строк;
 
//В  цикле по строкам:
ProgressBar1->Position++;
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 01:52
Avazart, да это все понятно. Я тут на другую проблемку наткнулся:
TProgressBar poperty out of range.
- это на
C++
1
ProgressBar1->Max= // кол_строк;
- т.е. у меня получилось столько строк, что в обычный int не влазит походу... Что делать?

Добавлено через 3 минуты
Вопрос: ну и какого фига? У меня 64 разрядная винда - int же должен быть 2^64 - разве нет??
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 01:55
Интересно, а сколько это? Что у тебя за файлы там?

C++
1
2
3
ProgressBar1->Max=1000;
 
ProgressBar1->Position+= кол_строк/1000 ;
Добавлено через 1 минуту
Ну в s->Count та влазиют?

Добавлено через 1 минуту
Есть другой вариант узнавать размер файла и при чтении с помощью fstream подсчитывать байты
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 01:57
Avazart, 2 папки с виндой: 91578^2 = 8386530084
4294967295 (max размер int для 32-битных систем)

Цитата Сообщение от Avazart Посмотреть сообщение
Ну в s->Count та влазиют?
Дык влазиют-то влазиют... Мне надо их перемножать между собой. Потому как я беру первую строку в файле и ищу ее по всему второму файлу. Потом беру вторую строку... И т.д.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 01:59
Ну тогда второй вариант... к тому же он быстрее vcl-ного будет
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 02:00
Цитата Сообщение от Avazart Посмотреть сообщение
Есть другой вариант узнавать размер файла и при чтении с помощью fstream подсчитывать байты
Мм... Наверное, вариант...

Добавлено через 34 секунды
Avazart, а что это за прикол?


Цитата Сообщение от The_Immortal Посмотреть сообщение
Вопрос: ну и какого фига? У меня 64 разрядная винда - int же должен быть 2^64 - разве нет??
Это я так жестко ошибался?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 02:01
C++
1
ShowMessage("размер int = "+String(sizeof(int)));
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 02:04
Avazart, 4... Ну и где отличия?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 02:07
(2^8)^4 = +/- 4 294 967 296 / 2

Ну так что не то?
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 02:10
Avazart,
Цитата Сообщение от Avazart Посмотреть сообщение
Ну так что не то?
Все-то. Для 32-х битных систем самое то.

Для 64-х битных ОС я ожидал увидеть 8 байт и соответственно:

(2^8)^8 = 18 446 744 073 709 551 616 - видимо, заблуждался...

Просто где-то слышал, что размер int'a именно 8-байтовым должен быть, но похоже, что что-то не так понял или не так услышал
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 02:12
Ну так int_64, size_t.
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 02:35
Avazart, точно, так 8 байт (__int64). Просто я думал, что на 64-битных ОС по умолчанию int будет иметь 8 байт


Цитата Сообщение от Avazart Посмотреть сообщение
Есть другой вариант узнавать размер файла и при чтении с помощью fstream подсчитывать байты
А можно какой-нить примерчик подсчитывания байтов? Только тут работа ведется с 2мя файлами... Как быть? Суммировать их размер?
Надо будет еще вот это учитывать:
Цитата Сообщение от The_Immortal Посмотреть сообщение
я беру первую строку в файле и ищу ее по всему второму файлу. Потом беру вторую строку... И т.д.
Т.е. размер второго файла каждый раз после одного прохода внешнего цикла (по первому файлу) будет скидываться...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 03:02
А можно какой-нить примерчик подсчитывания байтов?
Приблизительно так (для одного файла)
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
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
system("chcp 1251");
 
string str;
ifstream  f;
char ch;
int bs=0;
f.open("1.txt",ios::binary);
if(f)
 {
 while(f.get(ch))
   {
   if(ch=='\n'){ cout<<str<<endl; str.clear();/* Сравнение строк*/ }
   else        { str+=ch; }
   bs++;
   }
 cout<<bs<<" Байт"<<endl;
 }
system("pause");
return 0;
}
//----------------------------------------------------------------------
1
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 03:52
Avazart,
Цитата Сообщение от Avazart Посмотреть сообщение
(для одного файла)
Просто для двух файлов мы считаем опять-таки огромное число байт, которое также не влезет в ProgressBar1->Max...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 04:05
Ну зная размер файла его условно можно разбить на части размер которых вмещается в int (или более вместимый тип)
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 04:13
Avazart,

Цитата Сообщение от Avazart Посмотреть сообщение
Ну зная размер файла его условно можно разбить на части
Я об этом уже думал. Только вот разбивая его на части, я получать целое число не буду, а ProgressBar1->Position требует int... Будут значительные потери.

Добавлено через 2 минуты
Ну хотя можно же домножать...
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
29.06.2012, 04:22
Если у тебя файл, 8 ГБ то это приблизительно 4 размера int. Т.е int 1/4 полосы прогресса.
Приблизительно как-то так...
0
1569 / 505 / 48
Регистрация: 04.04.2009
Сообщений: 1,891
29.06.2012, 04:30
Avazart, у меня-то файл 3*974*488 байт Только вот общего считывания происходит на ~3*974*488^2 байт
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.06.2012, 04:30
Помогаю со студенческими работами здесь

Прогрессбар для фото
Есть слайдшоу, реализованное с помощью jquery.cycle2.js, как к нему сделать прогрессбар в форме кругляшков? &lt;div...

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

Применение цикла if для определения простых чисел. If внутри цикла for
Доброго времени суток, подскажите пожалуйста, в чем тут дело. С кодом все хорошо, все работает, просто я пытаюсь докопаться до сути и...

Для цикла с предусловием запишите его полный эквивалент с помощью цикла с постусловием
pr:=1; for i:=2 to n do if odd(i) then pr:=pr-(1/i) else pr:=pr+(1/i);

Как из цикла вывести данные для другого цикла?
Вообщем такая фигня... Как из цикла вывести данные для другого цикла? а то он не видит Пример : int x1 , x2 , d; if...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru