![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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