![Компьютерный форум OSzone.net](images/oszone.net.print.gif) |
|
Обработка StringGrid
В TMemo из файла загружен список файлов в виде [Линк |размер дата время]. Нужно чтобы в StringGrid в первом столбце были обработаные адреса файлов, а в втором - размер. Пробовал так:
Код:
procedure TForm1.RunBtnClick(Sender: TObject); {обработка файла}
var i, j, position, strlenght, x, y, w, MaxWidth: integer;
currstr, s: string;
begin
StringGrid.Visible:= true;
for j:=1 to 2 do {заполняется первый столбец, потом второй}
begin
for i:=1 to StringGrid.RowCount+1 do
begin
currstr:= Memo.Lines[i-1]; {получаем текущую строку}
strlenght:= length(currstr); {длина}
position:= pos(' |', currstr); {позиция конца адреса в строке}
if j=1 then {для первого столбца оставляем только линк}
begin
delete(currstr, position, strlenght-position+1);
currstr:= concat(EditPatch.text, currstr);
end
else {для второго солбца оставляем только размер файла}
begin
delete(currstr, 1, position+1);
position:= pos(' ', currstr);
delete(currstr, position, strlenght-position+1);
currstr:= IntToStr(StrToInt(currstr) div 1024 div 1024) + 'Mb';
end;
StringGrid.Cells[j,i]:= currstr; {заполняем ячейку}
if j=1 then ProgressBar.Position := 100 * i div StringGrid.RowCount
else ProgressBar.Position := 50 + 100 * i div StringGrid.RowCount
end;
end;
with StringGrid do {установить ширину ячеек по макс. ширине текста}
ClientHeight:= DefaultRowHeight * RowCount + 5;
with StringGrid do
begin
for x := 0 to ColCount - 1 do
begin
MaxWidth := 0;
for y := 0 to RowCount - 1 do
begin
w := Canvas.TextWidth(Cells[x,y]);
if w > MaxWidth then
MaxWidth := w;
end;
ColWidths[x] := MaxWidth + 5;
end;
end; {конец установки}
end;
При нажатии на кнопку выбрасывает ошибку:
Debugger Exeption Notificetion
Project ***** raised exeprion class EConvertError with message "is not a valid integer value"
з.ы. и ещё - как лучше напрямую прочитать/записать данные в StringGrid из текстового файла? (подразумевается обработка по 5-30 тыс. строк текста)
з.з.ы. как правильно прикрутить к проэкту XPManifest? простым добавлением на форму не хочет. Среда Delphi 7.0
|
ошибка может быть только тут, но я у себя скомпилил все в порядке , значит ошибка раньше - возможно в memo или в файле с данными
|
Цитата:
Цитата Alan85
как правильно прикрутить к проэкту XPManifest? простым добавлением на форму не хочет. Среда Delphi 7.0 »
|
В uses добавьте XPMan.
|
Таки да, компилятору не понравилось именно это, точнее не сам перевод строки в integer, а почему-то попытка использовать его как аргумент для div. Пробовал отдельно StrToInt присвоить real-переменой, потом значение real-а передать integer переменной и уже из неё вычислять размер в Мб - всё равно не хочет :(
-уже присутствует :(
|
Так ведь же у меня (думаю и других тоже) прошло на тесте.
Цитата:
Цитата noname_06
is not a valid integer value »
|
Похоже что где то у тебя вместо числа передается чисто с лишним пробелом или символом. Попробуй пошагово отдебагить с выводом сообщений что где чему равно и на чем спотыкается.
|
Не знаю что это было, но переписал как
Код:
size: integer;
size:= StrToInt(currstr) div 1048576;
StringGrid.Cells[j,i]:= IntToStr(size) + ' Mb';
и всё прошло, на том же самом файле
|
Время: 14:08.
© OSzone.net 2001-