Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 16

Сохранение массива в файл, проверка целого числа и тд

14.12.2014, 12:51. Показов 1433. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Пишу курсовую работу, нужна ваша помощь. Уже не знаю что делать, есть несколько ошибок, надеюсь на вашу помощь, в решении таковых.

1. Сохранение массива из элемента StringGrid в файл .txt (с сохранением "формы" массива).

Т.е. в .txt файл должен выглядеть вот так:
Delphi
1
2
3
4
5
1 2 3
1 2 3
1 2 3
 
Определитель матрицы: 0
Но у меня конечный файл выглядит вот так:
Delphi
1
2
3
1 2 3 1 2 3 1 2 3
 
Определитель матрицы: 0
Помогите пожалуйста исправить. Вот код процедуры сохранения:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.SaveStringGrid(StringGrid: TStringGrid;
          const FileName: TFileName); // ïðîöåäóðà ñîõð. ìàòðèöû è îïðåäåëèòåëÿ
 var
   f:    TextFile;
   i, k: Integer;
 begin
  if SaveDialog1.Execute then      // âûáîð äèðåêòîðèè ñîõð. ôàéëà
    AssignFile(f, savedialog1.FileName);
    Rewrite(f);
  with StringGrid do
  begin
   for k := 0 to RowCount - 1 do
     for i := 0 to ColCount - 1 do
       begin
       Write(F, Cells[i, k], ' ');
       end;
  end;
  Writeln(f);
  Writeln(f);
  Write(f, 'Îïðåäåëèòåëü ìàòðèöû: ' + Edit1.Text);
  CloseFile(F);
 end;
2. По заданию у меня массив должен состоять из целых чисел. Это реализованно посредством использования типа integer. Но если в файле есть вещественное число, выбивается ошибка "...raised exception class einouterror with message 'invalid numeric input'...". Как сделать так, чтобы, если было найдено вещественное число, или иной посторонний знак, появлялось сообщение ShowMessages с ошибкой. Вот код процедуры чтения из файла и заполнения StringGrid.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
procedure TForm1.LoadStringGrid(StringGrid: TStringGrid;
                                const FileName: TFileName);
label                                     // ìåòêè äëÿ goto
  start,
  finish;
var
  f:          TextFile;
  i, j, coll, n, m, g, btsel:  Integer;
  strTemp, s:    String;
begin
  start:
 
  if OpenDialog1.Execute then                // âûáîð äèðåêòîðèè õðàíåíèÿ ôàéëà
  begin
    AssignFile(f, openDialog1.FileName);   // ÷òåíèå ôàéëà
    Reset(f);
  end
  else
  begin                             // åñëè ôàéë íå âûáðàí, äèàëîã ïðîäîëæàåòñÿ
    btsel:=MessageDlg('Ôàéë íå âûáðàí. '+
    'Ïîâòîðèòå ïîïûòêó',mtConfirmation, mbOKCancel,0);
 
    if (btsel=mrCancel) then        // îáðàáîòêà êíîïêè Cancel
      goto finish
    else
      goto start;
  end;
 
  with StringGrid do                // íà÷àëî çàïîëíåíèÿ ìàññèâà
  begin
    n:=0;
    g:=0;
    coll:=0;
 
    while not EOF (f) do           // ïîäñ÷åò ñòðîê
    begin
      readln(f,strTemp);
      n:=n+1;
    end;
 
    RowCount:= n;
    reset(f);
    readln(f,strTemp);
 
    while not EOLN (f) do             // ïîäñ÷åò ñòîëáöîâ
    begin
      read(f,m);
      g:=g+1;
    end;
 
    ColCount:=g;
    reset(f);
 
    if (n<>g) then                   // ïðîâåðêà íà òî, ÷òî ìàòðèöà êâàäðàòíàÿ
      begin;
        s:='Îøèáêà. Êîëè÷åñòâî ñòðîê è ñòîëáöîâ íå îäèíàêîâî, ëèáî '+
        'ñîäåðæèìîå ôàéëà íå èçâåñòíî.'+' Ïðîãðàììà áóäåò çàâåðøåíà.';
        ShowMessage(s);
        Form1.Close;
      end
    else
 
    for j := 0 to RowCount - 1 do            // çàïîëíåíèå ýëåìåíòîâ StringGrid
 
      for i := 0 to ColCount - 1 do
      begin
        Read(f, m);
        Cells[i, j] := FloatToStr(m);
        Coll:=Coll+1;                   // ïîäñ÷åò êîëè÷åñòâà ýëåìåíòîâ ìàññèâà
      end;
 
  end;
 
  CloseFile(f);
  Edit2.Text:=IntToStr(Coll);
  finish:
end;
P.S. Уважаемые гуру, не ругайтесь по поводу goto, в программировании я всего пару месяцев, надеюсь на вашу помощь.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.12.2014, 12:51
Ответы с готовыми решениями:

Проверка ввода целого числа
Помогите разобраться, плиз... есть код: #include &lt;iostream&gt; using std::endl; using std::cout; using std::cin; void...

Множества, проверка вхождения целого числа
Даны числа а1, а2, ... , аn(могут повторяться). Вывести на печать все которые входят в последовательность по одному разу.

Исключения. Проверка на правильность введения целого числа
Надо сделать в программе несколько исключений. Одно из них должно срабатывать если вместо числа(int) будет введено число с точкой(float,...

9
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
14.12.2014, 13:06
Могу предложить такой вариант:
Сохранить таблицу в файл
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
14.12.2014, 13:13
Лучший ответ Сообщение было отмечено San9I как решение

Решение

Цитата Сообщение от San9I Посмотреть сообщение
Сохранение массива из элемента StringGrid в файл .txt
Ну если есть массив, то и сохраняй его, при чем тут таблица?
Но уж если приспичило, то пиши так
Delphi
1
2
3
4
5
6
7
8
9
with StringGrid do
  begin
   for k := 0 to RowCount - 1 do
    begin
      for i := 0 to ColCount - 1 do
      Write(F, Cells[i, k], ' ');
      Writeln(F);//новая строка в файле
     end;
  end;
1
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 16
14.12.2014, 15:16  [ТС]
Спасибо, все что требовалось, это лишь эту строчку дописать. Я писал ее раньше, но что то не работала. В форме таблицы надо сохранять, т.к этого требует техническое задание.

Теперь бы еще хотелось увидеть ответ на второй вопрос.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
14.12.2014, 15:26
Цитата Сообщение от San9I Посмотреть сообщение
Теперь бы еще хотелось увидеть ответ на второй вопрос.
При чтении строк для подсчета их количества проверяйте в них наличие символов, отличных от цифр, пробелов и знаков табуляции. Если такие символы есть, выводите сообщение о неверных данных в файле и аварийно выходите из процедуры или из программы.
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 16
14.12.2014, 15:30  [ТС]
В том то и дело, что я пишу функцию для поиска символов, отличных от цифр тут, во время подсчета столбцов (первое чтение символов, подсчет столбцов).
Delphi
1
2
3
4
5
    while not EOLN (f) do             // подсчет столбцов
    begin
      read(f,m);
      g:=g+1;
    end;
Но все равно ошибка вылезает. Может я не тут пишу, и не то был бы благодарен, если бы вы помогли, что, куда и к чему)
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
14.12.2014, 15:31
Цитата Сообщение от San9I Посмотреть сообщение
во время подсчета столбцов
Я пишу
Цитата Сообщение от Puporev Посмотреть сообщение
При чтении строк для подсчета их количества
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 16
14.12.2014, 15:34  [ТС]
Сейчас попробую, отпишусь.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
14.12.2014, 15:35
Delphi
1
2
3
4
5
6
7
8
9
10
11
while not EOF (f) do           // подсчет строк
 begin
  readln(f,strTemp);
  k:=0;
  i:=1;
  while(i<=length(strTemp))and(k=0) do
  if not(strTemp[i] in ['0'..'9',#32,#7]) then k:=1
  else inc(i);
  if k=1 then сообщение и выход
  else n:=n+1;
 end;
0
1 / 1 / 0
Регистрация: 14.12.2014
Сообщений: 16
14.12.2014, 15:41  [ТС]
Все, большое спасибо, темку можно закрывать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.12.2014, 15:41
Помогаю со студенческими работами здесь

Фильтр на ввод целого неотрицательного числа и его проверка на простоту
Господа, горю с заданием. Нужно написать программу, которая при помощи стандартного ввода могла бы проверить является ли строка целым...

Проверка формы и сохранение данных в файл
У меня есть html-форма регистрации. Ее нужно проверить с помощью php и сохранить данные в файл (например *.txt) Как это сделать ? ...

Проверка ввода и сохранение выходной таблицы в файл
Доброго времени.Помогите с проверкой ввода и как сохранить выходную таблицу в тхт файл . При проверке ввода меня выбрасывает на иной...

Записать в файл строки, являющиеся записью целого числа
Как Записать в новый файл те строки исходного текстового файла, которые являются записью целого числа.

Из произвольного целого числа или длинного целого числа, вводимого с клавиатуры, путем изменения цифр 0 или 1
Произвольное длинное целое число разделить на четыре однобайтовых целых числа, каждому из которых поставить в соответствие символ.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru