Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 1 726

Раздел: Delphi » Прочее
/ вопрос решён /

Здравствуйте, эксперты! Хочу у вас попросить помощи. Вылетает ошибка I/O error 103. Так же, если не сложно, помогите сделать так, что бы была возможность сохранять кроме данных таблици, ещё и результат. код в прикреплённых файлах.

К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)

mamont Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: mamont (статус: Посетитель)
Вопрос отправлен: 25 июня 2008, 00:25
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: rnt777

Здравствуйте, mamont!
это же надо додуматья запихнуть код в ворд :)
просто глядя на код могу возникает вопрос:
зачем в procedure TForm1.Button5Click(Sender: TObject);
закрытие файла и вывод сообщения указаны в цикле? закрыть файл достаточно один раз после выполнения всех циклов. тут же предложу поменять местами строки "for j:=0 to 100 do" и "for i:=0 to 7 do".
Во-вторых, в procedure TForm1.Button4Click(Sender: TObject);
цикл Repeat-until поменяем на for. и обрати внимание что в конце строки входного файла должен стоять пробел.
получим цикл:

for j:=1 to Length(z) do
begin
if (z[j]<>' ')
then g:=g+z[j]
else begin
stringgrid1.Cells[i,l]:=g;
i:=i+1;
g:='';
end;
end;
Тут же видим что поле "Дно лощины" содержит пробел. значит теоретически программа ее разделит на две части и запишет в таблицу неправильно. поэтому могу предложить использовать TAB #8 или писать "Дно_лощины"

Приложение:
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. var a:array[1..100,1..100]of string;
  3. b:array[1..100]of string;
  4. f:Textfile;
  5. i,j,t:integer;
  6. begin
  7. stringgrid1.Cells[0,0]:='? ?????';
  8. stringgrid1.Cells[1,0]:='?????-????';
  9. stringgrid1.Cells[2,0]:='????????';
  10. stringgrid1.Cells[3,0]:='???????? ??????????????';
  11. stringgrid1.Cells[4,0]:='??? ?????????????? ?????';
  12. stringgrid1.Cells[5,0]:='?';
  13. stringgrid1.Cells[6,0]:='?';
  14. stringgrid1.Cells[7,0]:='?';
  15. j:=0;
  16. repeat
  17. j:=j+1;
  18. if Length(StringGrid1.Cells[1,j])=0
  19. then t:=1;
  20. until t=1;
  21. for i:=1 to 7 do
  22. begin
  23. b[i]:=stringgrid2.Cells[i-1,0];
  24. stringgrid1.Cells[i,j]:=b[i];
  25. stringgrid1.Cells[0,j]:=inttostr(j);
  26. end;
  27. end;
  28.  
  29. procedure TForm1.Button2Click(Sender: TObject);
  30. var i, j: integer;
  31. begin
  32. for i:=1 to 100 do
  33. for j:=1 to 100 do
  34. stringgrid1.Cells[i,j]:=stringgrid1.Cells[i,j+1];
  35. end;
  36.  
  37. procedure TForm1.Button3Click(Sender: TObject);
  38. var n1,n2,i,j:integer;
  39. x1,x2,y1,y2,s,h1,h2,h:real;
  40. begin
  41. n1:=strtoint(edit1.Text);
  42. n2:=strtoint(edit2.Text);
  43. i:=n1;
  44. j:=n2;
  45. x1:=strtofloat(stringgrid1.cells[5,i]);
  46. y1:=strtofloat(stringgrid1.cells[6,i]);
  47. x2:=strtofloat(stringgrid1.cells[5,j]);
  48. y2:=strtofloat(stringgrid1.cells[6,j]);
  49. h1:=strtofloat(stringgrid1.cells[7,i]);
  50. h2:=strtofloat(stringgrid1.cells[7,j]);
  51. h:=h2-h1;
  52. s:=sqrt(sqr(x2-x1)+sqr(y2-y1));
  53. edit3.Text:=floattostr(s);
  54. Edit4.Text:=floattostr(h);
  55. end;
  56.  
  57. procedure TForm1.Button4Click(Sender: TObject);
  58. var a:array[1..100] of char;
  59. s:char;
  60. f:textfile;
  61. g,z:string;
  62. i,j,l:integer;
  63. begin
  64. if opendialog1.Execute
  65. then assignfile(f,Opendialog1.FileName);
  66. reset(f);
  67. l:=1;
  68. while not EOF(f) do
  69. begin
  70. stringgrid1.Cells[1,l]:=inttostr(l);
  71. i:=1;
  72. j:=1;
  73. readln(f,z);
  74. g:='';
  75. for j:=1 to Length(z) do
  76. begin
  77. if (z[j]<>' ')
  78. then g:=g+z[j]
  79. else begin
  80. stringgrid1.Cells[i,l]:=g;
  81. i:=i+1;
  82. g:='';
  83. end;
  84. end;
  85. l:=l+1;
  86. end;
  87. closefile(f);
  88. end;
  89.  
  90. procedure TForm1.Button5Click(Sender: TObject);
  91. var l:textfile;
  92. a:array[1..8] of char;
  93. i,j:integer;
  94. begin
  95. if opendialog1.Execute
  96. then assignfile(l,opendialog1.FileName);
  97. rewrite(l);
  98. for j:=0 to 100 do
  99. for i:=0 to 7 do
  100. writeln(l, stringgrid1.cells[j+1,i+1]+' ');
  101. closefile(l);
  102. MessageDlg('?????? ???????? ? ???? '+extractfilename(opendialog1.FileName),mtinformation,[mbOk],0);
  103. end;


Ответ отправил: rnt777 (статус: 1-ый класс)
Время отправки: 25 июня 2008, 07:04
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Шичко Игорь

Здравствуйте, mamont!
Ошибка скорее всего в процедуре:
procedure TForm1.Button5Click(Sender: TObject);
var
l:textfile;
a:array[1..8] of char;
i,j:integer;
begin
if opendialog1.Execute then
assignfile(l,opendialog1.FileName);
rewrite(l);
for i:=0 to 7 do
begin
for j:=0 to 100 do
begin
writeln(l, stringgrid1.cells[j+1,i+1],' ');
closefile(l); //
MessageDlg('Данные ЗАПИСАНЫ в файл ',mtinformation,[mbOk],0);
end;
end;
end;

Вы открыли файл один раз, а цикле его закрываете, поэтому в следующем шаге он уже закрыт.
Подправить: (типа того)
procedure TForm1.Button5Click(Sender: TObject);
var
l:textfile;
a:array[1..8] of char;
i,j:integer;
begin
if opendialog1.Execute then
assignfile(l,opendialog1.FileName);
rewrite(l); //открыли
for i:=0 to 7 do
begin
for j:=0 to 100 do
begin
writeln(l, stringgrid1.cells[j+1,i+1],' '); //двумя циклами записываем
end; // переместили цикл
end; // переместили цикл
closefile(l); // закрыли файл
MessageDlg('Данные ЗАПИСАНЫ в файл ',mtinformation,[mbOk],0);
end;

Совет: если цикл состоит из одного оператора то begin/end можно не ставить для сокращения кода.

Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 25 июня 2008, 08:13
Оценка за ответ: 5


Мини-форум вопроса

Всего сообщений: 1; последнее сообщение — 25 июня 2008, 05:03; участников в обсуждении: 1.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 25 июня 2008, 05:03 [#1]:

При выполнении какой процедуры выскакивает ошибка? Какой именно результат необходимо сохранять?В следующий раз когда будете отправлять код программы лучше архивируйте папку,где находится проект, предварительно удалив exe файл и отправляйте полученный архив.

31 января 2011, 19:31: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 14 декабря 2017, 07:05
Выполнено за 0.02 сек.
Рейтинг@Mail.ru