Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TGauge для вывода сколько процентов файла обработано. [D7, XP]


operator ©   (2008-04-17 12:14:00) 

Есть текстовый файл, программа обрабатывает построчно. Хочу выводит на экран информацию о ходе выполнения:


procedure TForm1.Button1Click(Sender: TObject);
const filename:string='Z:\share\wafer 6eid48302-1-02 W6EID48302-1-02 20080329 221001.rstl';
var f:textfile;
   sr:TSearchRec;
   size,complete:longint;
   s:string;
begin
   complete:=0;
   findfirst(filename,faanyfile,sr);
   size:=sr.Size;
   assignfile(f,filename);
   reset(f);
   while not eof(f) do begin
     readln(f,s);
     inc(complete,length(s));
     Gauge1.Progress:=round(100*complete/size);
     //Обработка строки
   end;
end;


пробую на файле размером 46 Мб, в результате в районе 40-50 процентов индикатор сбрасывается в 0, после анализа выяснил, что в этотм момент
round(100*complete/size);
возвращает ему отрицательное значение. :-\ :-\


ASoft   (2008-04-17 17:05:00) [1]


> operator ©   (17.04.08 12:14)

файл не забудь закрыть:)


operator   (2008-04-17 12:28:00) [2]


> Заключи деление в скобки или используй Integer.


Работает, спасибо! :-)


Плохиш   (2008-04-17 12:22:00) [3]


> Сергей М. ©   (17.04.08 12:20) [1]
>
> > выяснил, что в этотм момент
> > round(100*complete/size);
>
>
> Значит в этот момент complete < 0

= 21474837 * 100
;-)


Плохиш   (2008-04-17 12:22:00) [4]


> * 100

выкинуть :-)))


Плохиш   (2008-04-17 12:21:00) [5]


Generic integer types Type  Range  Format  .NET Type Mapping  
Integer
-2147483648..2147483647
signed 32-bit
System.Int32

Cardinal
0..4294967295
unsigned 32-bit
System.UInt32


Fundamental integer types include Shortint, Smallint, Longint, Int64, Byte, Word, and Longword.
Fundamental integer types Type  Range  Format  .NET Type Mapping  
Shortint
-128..127
signed 8-bit
System.SByte

Smallint
-32768..32767
signed 16-bit
System.Int16

Longint
-2147483648..2147483647
signed 32-bit
System.Int32

Int64
-2^63..2^63-1
signed 64-bit
System.Int64

Byte
0..255
unsigned 8-bit
System.Byte

Word
0..65535
unsigned 16-bit
System.UInt16

Longword
0..4294967295
unsigned 32-bit
System.UInt32

Заключи деление в скобки или используй Integer.


oldman   (2008-04-17 12:21:00) [6]


> после анализа выяснил, что в этотм момент
> round(100*complete/size);
> возвращает ему отрицательное значение.


Проверь в этот момент значения complete и size.
О результатах сообщи.


Сергей М.   (2008-04-17 12:20:00) [7]


> выяснил, что в этотм момент
> round(100*complete/size);


Значит в этот момент complete < 0


Наверх

Титульная страница Поиск, карта сайта Написать письмо