допустим есть текстовый файл содержащий следующие данные:
2 4 5 6 7
4 5 7 8 9
4 * 5 7 *
4 5 * 6 7
5 6 7 1 2
* - это пусто место
Как прочитать это файл и расставить каждое число в определенно место (каждой ячейки свое число) Stringgrid?
Да и если файл Excel как его прочитать и тоже расставить числа в ячейки, если ячейка Excel пустая, то и соответсвующая ячейка Stringgrid тоже пустая.
Чтение из файла
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
а с чем проблема?2 4 5 6 7
4 5 7 8 9
4 * 5 7 *
4 5 * 6 7
5 6 7 1 2
Советую считать в TStringList и работать построчно. В приведенном примере можно вообще все нечетные символы пихать в таблицу...
Код: Выделить всё
procedure ParseTextFile(StringGrid: TStringGrid; FileName: String);
Var
SL : TStringList;
posy, posx, i : Integer;
S : String;
begin
SL := TStringList.Create;
try
SL.LoadFromFile(FileName);
For posy := 1 to SL.Count do
begin
posx := 1; S := '';
For i := 1 to Length(SL.Strings[posy-1]) do
if SL.Strings[posy-1][i] <> ' ' then S := S + SL.Strings[posy-1][i]
else begin
if S <> '*' then StringGrid.Cells[posx, posy] := S;
inc(posx); S := '';
end;
if (S <> '') and (S <> '*') then StringGrid.Cells[posx, posy] := S;
end;
finally
StringGrid.RowCount := posy;
StringGrid.ColCount := posx+1;
SL.Free;
end;
end;
Код: Выделить всё
ParseTextFile(StringGrid1, 'in.txt');
С уважением, Lost Angel...
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
YurikGL,
проблема из строки
"2 5 5 5 9 4 4 3 5 1 44 5 235 35"
извлечь все числа
проблема из строки
"2 5 5 5 9 4 4 3 5 1 44 5 235 35"
извлечь все числа
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
-
- Сообщения: 340
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
где между числами может быть различное число пробелов
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Для Excel'я:Да и если файл Excel как его прочитать и тоже расставить числа в ячейки, если ячейка Excel пустая, то и соответсвующая ячейка Stringgrid тоже пустая.
Код: Выделить всё
uses ..., ExcelXP;
...
TForm1 = class(TForm)
...
private
{ Private declarations }
procedure ParseExcelFile(StringGrid: TStringGrid; FileName: String);
...
procedure TForm1.ParseExcelFile(StringGrid: TStringGrid; FileName: String);
Var
Excel : TExcelApplication;
WorkBook : TExcelWorkbook;
WorkSheet : TExcelWorksheet;
i, j : Integer;
begin
Excel := TExcelApplication.Create(self);
WorkBook := TExcelWorkbook.Create(Excel);
WorkBook.ConnectTo(Excel.WorkBooks.Open(FileName, EmptyParam, EmptyParam, EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, LOCALE_USER_DEFAULT));
WorkSheet := TExcelWorksheet.Create(WorkBook);
WorkSheet.ConnectTo(WorkBook.WorkSheets.Item[1] as _Worksheet);
For i := 1 to VarArrayHighBound(WorkSheet.UsedRange[LOCALE_USER_DEFAULT].Value2, 1) do
For j := 1 to VarArrayHighBound(WorkSheet.UsedRange[LOCALE_USER_DEFAULT].Value2, 2) do
StringGrid.Cells[j, i] := WorkSheet.UsedRange[LOCALE_USER_DEFAULT].Value2[i,j];
StringGrid.ColCount := VarArrayHighBound(WorkSheet.UsedRange[LOCALE_USER_DEFAULT].Value2, 2)+1;
StringGrid.RowCount := VarArrayHighBound(WorkSheet.UsedRange[LOCALE_USER_DEFAULT].Value2, 1)+1;
WorkBook.Close(False);
Excel.Quit;
if Assigned(WorkSheet) then FreeAndNil(WorkSheet);
if Assigned(Workbook) then FreeAndNil(Workbook);
if Assigned(Excel) then FreeAndNil(Excel);
end;
С уважением, Lost Angel...