![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
доброго времени суток!
помогите пожалуйста новичку с решением задачи. задача такова: имеются StringGrid и текстовый файл следующего содержания ____________________________ ООО "василек",7712349578 ООО "здоровье",5046287439 ООО" ромашка",7733478323 ____________________________ Сохраняю StringGrid в текстовый фаил так: Код:
procedure TForm1.SpeedButton2Click(Sender: TObject);
Var
I : Byte;
F : TextFile;
S : String;
begin
AssignFile(F, 'Test.txt');
Rewrite(F);
For I := 1 to StringGrid1.RowCount - 1 do
Begin
Writeln(F,StringGrid1.Cells[0,I] +','+StringGrid1.Cells[1,I])
end;
CloseFile(F)
end;а вот с загрузкой текстового фаила в StringGrid ни чего не выходит. пожалуйста подскажите хотя бы в каком направлении искать. Помогите пожалуйста, очень надо!!! Последний раз редактировалось Admin, 29.04.2010 в 22:05. |
|
#2
|
|||
|
|||
|
Читаешь из файла стррку, потом находишь разделитель (ф-я Pos), потом "пилишь" ее на части (ф-я Copy), потом эти части пихаешь в StringGrid. Типа:
Код:
...
ReadLn(F,S);
StringGrid1.Cells[0,i] := Copy(S,1,Pos(',',S)-1);
StringGrid1.Cells[2,i] := Copy(S,Pos(',',S)+1,Length(S)); // здесь маленький хак с кол-вом копируемых символов... |
|
#3
|
||||
|
||||
|
Для удобной загрузки созранять лутче так
Код:
procedure TForm1.SpeedButton2Click(Sender: TObject);
Var
F : TextFile;
begin
AssignFile(F, 'Test.txt');
Rewrite(F);
For I := 1 to StringGrid1.RowCount - 1 do
Begin
Writeln(F,StringGrid1.Cells[0,I]);
Writeln(F,StringGrid1.Cells[1,I]);
end;
CloseFile(F)
end;Код:
procedure TForm1.SpeedButton3Click(Sender: TObject);
Var
F : TextFile;
begin
AssignFile(F, 'Test.txt');
Reset(F);
while not EOF(f) do
Begin
readln(F,StringGrid1.Cells[0,I]);
readln(F,StringGrid1.Cells[1,I]);
end;
CloseFile(F)
end; |
|
#4
|
||||
|
||||
|
Я бы порекоммендовал создать запись вида
Код:
type Tf : record Name : string[20];//размер обязателен Number : string[20]; end; var ff : file of Tf;//файл записей f : Tf;//переменная записи Код:
begin AssignFile(ff, 'Test.dat'); Rewrite(ff); For I := 1 to StringGrid1.RowCount - 1 do Begin f.Name := StringGrid1.Cells[0,I]; f.Number := StringGrid1.Cells[1,I]; Seek(ff, FileSize(ff)-1); Write(f); end; CloseFile(ff); end; Код:
begin AssignFile(ff, 'Test.dat'); Reset(ff); For I := 0 to FileSize(ff)-1 do Begin Seek(ff, i); read(f); StringGrid1.Cells[0,I] := f.Name; StringGrid1.Cells[1,I] := f.Number; end; CloseFile(ff); end; |
|
#5
|
|||
|
|||
|
перепробовал все предложеные варианты не выходит
толи лыжи не едут, толи у меня мозг перегорел от перегрузки. уже неделю загараю с этой загрузкой |
|
#6
|
|||
|
|||
|
Ять!!! Вот народ ленивый пошел...
Код:
procedure TForm1.btLoadClick(Sender : TObject);
var
L : TStringList;
I : Integer;
begin
L := TStringList.Create;
L.LoadFromFile('test.txt');
StringGrid1.Rows := L.Count;
StringGrid1.Cols := 2;
For I := 0 To L.Count-1 Do
Begin
StringGrid1.Cells[0,i] := Copy(L[i],1,Pos(',',L[i])-1);
StringGrid1.Cells[1,i] := Copy(L[i],Pos(',',L[i])+1,Length(L[i]));
End;
L.Free;
end; |
|
#7
|
|||
|
|||
|
lmikle спасибо!!!
остался единственный вопрос остался: как загружать первую по счету строку файла в первую строку StringGrid. пробовал менять эту строку Код:
For I := 0 To L.Count-1 Do а если не чего не менять грузиться с первой по счету строчки файла но с нулевой фиксированной строки StringGrid, и получается некрасиво. может кто подкинет идею, а лучше кодинг, а если с описанием буду очень благодарен. |
|
#8
|
|||
|
|||
|
Догадайся сам. Решение очень простое.
Но тебе придется разобраться с нумераций ячеек в TStringGrid и строк в TStringList. |
|
#9
|
|||
|
|||
|
так что ли:
Код:
For I := 0 To L.Count-1 Do
Begin
StringGrid1.Cells[0,i + 1] := Copy(L[i],1,Pos(',',L[i])-1);
StringGrid1.Cells[1,i + 1] := Copy(L[i],Pos(',',L[i])+1,Length(L[i]));
End;теперь все пучком ![]() Последний раз редактировалось konsul_81, 01.05.2010 в 12:19. |
|
#10
|
|||
|
|||
|
вот так наверно правильней будет
Код:
rocedure TForm1.Button_LoadClick(Sender: TObject);
var
L : TStringList;
I : Integer;
begin
L := TStringList.Create;
L.LoadFromFile('Test.txt');
StringGrid1.RowCount := L.Count+1;
StringGrid1.ColCount := 2;
For I := 0 To L.Count-1 Do
Begin
StringGrid1.Cells[0,i + 1] := Copy(L[i],1,Pos(',',L[i])-1);
StringGrid1.Cells[1,i + 1] := Copy(L[i],Pos(',',L[i])+1,Length(L[i]));
End;
L.Free;
end;![]() Последний раз редактировалось konsul_81, 01.05.2010 в 12:55. |
|
#11
|
|||
|
|||
|
у меня такая же проблема, надо считать из файла двумерный массив в stringgrid, но фишка в том что у меня он считывается, прогу мне писал знакомый, сам я плохо разбираюсь, текст вот:
Код:
procedure TFormMain.ButCalcClick(Sender: TObject);
var
S:Real;
F:TextFile;
A:array of array of Real;
N,M,I,J:Integer;
begin
AssignFile(F,OpenDialog1.FileName);
Reset(F);
ReadLn(F,N,M);
Massiv.RowCount:=N+1;
Massiv.ColCount:=M+1;
SetLength(A,Massiv.RowCount,Massiv.ColCount);
for I:=0 to Massiv.RowCount-1 do
Massiv.Cells[I,0]:=IntToStr(I);
for J:=0 to Massiv.ColCount-1 do
Massiv.Cells[0,J]:=IntToStr(J);
for I:=1 to Massiv.RowCount-1 do
begin
for J:=1 to Massiv.ColCount-1 do
Read(F,A[I,J]);
ReadLn(F)
end;
for I:=1 to Massiv.RowCount-1 do
for J:=1 to Massiv.ColCount-1 do
Massiv.Cells[I,J]:=FloatToStr(A[I,J]);
S:=0;
for I:=1 to Massiv.RowCount-1 do
for J:=1 to Massiv.ColCount-1 do
if RdGrCh.ItemIndex=0 then
if (I+J) mod 2=0 then
S:=S+A[I,J]
else
if RdGrCh.ItemIndex=1 then
if (I+J) mod 2<>0 then
S:=S+A[I,J];
EdRes.Text:=FloatToStr(S);
ButCalc.Enabled:=false;
showMessage('Результат: '+FloatToStr(S));
end;
procedure TFormMain.ButCloseClick(Sender: TObject);
begin
close;
end;
procedure TFormMain.ButLoadClick(Sender: TObject);
begin
if OpenDialog1.Execute then
butCalc.Enabled:=true
else
begin
LabTrack.Caption:='Файл не выбран'
end;
end;
procedure TFormMain.RdGrChClick(Sender: TObject);
begin
butLoad.Enabled:=true;
end;
end. но преподу не нравится говорит типа зачем "надо сначала выбрать элементы, а потом загружать массив, по-моему это 2 независымие операции, исправляй" +еще с процедуркой ButLoadClick фигня, получается что эта кнопка становится доступной только когда выполняется openDialog а в программе производится 2 разных суммы, и получается что если ты сперва находишь первую сумму и загружаешь массив из файла, а потом хочешь найти вторую сумму то приходится загружать массив повторно, это тоже надо исправить Последний раз редактировалось president100, 12.05.2010 в 00:10. |