Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/72: Рейтинг темы: голосов - 72, средняя оценка - 4.96
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198

Сохранение в файл

02.12.2009, 21:40. Показов 13930. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем здравствуйте. Такая проблема в этом коде не работает сохранение:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TMainForm.FileSaveClick(Sender: TObject);
var
  f:TextFile;  //файл со значениями
  n:integer;  //размерность матрицы
  buf:double;  //буферная переменная
  i,j:integer;  //счетчики цикла
  Vector:TVector;  //одномерный массив, который надо записать в файл
begin
  if SaveFileDialog.Execute and FileExists(SaveFileDialog.FileName) then
    try
      AssignFile(f,SaveFileDialog.Filename);
      rewrite(f);
      n:=StrToInt(SpinEditNumberOfEquals.Text);
      write(f,n);
      for i:=Low(Vector) to High(Vector) do
        begin
           write(f,Vector[i]);
         end;
     CloseFile(f);
    except
      MessageDlg('Ошибка сохранения данных в файл!',mtError,[mbOk],0);
    end;
end;
Как поравить? Даже не создаётся файл
1
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2009, 21:40
Ответы с готовыми решениями:

Сохранение в файл
Здравствуйте, помогите сделать сохранение координат обхода матрицы в файл. Начала делоать, пробую так, как в коде написано - выдаёт ошибку...

сохранение в файл
Объясните пожалуйста, как сохранить открытый уже файл. У меня есть 2 опции: "сохранить как" и "сохранить". ну первое через...

Сохранение в файл
Кто может подсказать 1 вопрос почему не применяется фильтр к компоненту, пустое расширение var i, k: integer; f : TextFile; ...

12
1 / 1 / 1
Регистрация: 02.12.2009
Сообщений: 50
02.12.2009, 22:29
в чем проблема?
у меня твой код работает
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
02.12.2009, 22:43
Здесь:
Delphi
1
if SaveFileDialog.Execute and FileExists(SaveFileDialog.FileName) then
если файл пока не существует, то управление в раздел THEN не будет передано.
Т. е. программа сначала вычислит первую часть выражения: SaveFileDialog.Execute. Если пользователь задал в диалоге какое-нибудь имя файла, то произойдёт вычисление второй части выражения: FileExists(SaveFileDialog.FileName). - Но этого файла пока не существует, значит результатом вычисления всего выражения станет значение FALSE. Поэтому операторы в разделе THEN выполнены не будут.
Таких конструкций следует либо избегать, либо знать об особенностях вычисления лог. выражений в Delphi. Есть 2 режима вычислений для лог. выражений - короткий (он по умолчанию включен) и длинный. При коротком, например:
a and (b or c)
Если а=FALSE, то вторая часть: (b or c) вычисляться не будет, т. к. при а=FALSE значение выражение равно FALSE на зависимо от значения (b or c).
При длинном будут рассчитаны все части лог. выражения.
Переключение между двумя этими режимами производится через меню:
Project - Options - закладка Compiler - флажок Complete boolean eval. Если флажок сброшен - задействована короткая форма. Иначе - длинная. По умолчанию принята короткая.
Либо в коде можно переключать режимы через директивы компилятору:
{$B-} - включить короткую форму.
{$B} либо {$B+} - влючить длинную форму.
---
В рассматриваемом коде будут проблемы при любом режиме. Т. е. код надо перестроить так, чтобы SaveFileDialog.Execute и FileExists(SaveFileDialog.FileName) не являлись операндами одного и того же выражения:
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
procedure TMainForm.FileSaveClick(Sender: TObject);
var
  f:TextFile;  //файл со значениями
  n:integer;  //размерность матрицы
  buf:double;  //буферная переменная
  i,j:integer;  //счетчики цикла
  Vector:TVector;  //одномерный массив, который надо записать в файл
begin
  if not SaveFileDialog.Execute then begin
    Exit;
  end;
 
  if not FileExists(SaveFileDialog.FileName) then begin
    MessageDlg('Файл с заданным именем не существует. Действие отменено.',mtWarning,[mbOk],0);
    Exit;
  end;
 
  try
    AssignFile(f,SaveFileDialog.Filename);
    rewrite(f);
    n:=StrToInt(SpinEditNumberOfEquals.Text);
    write(f,n);
    for i:=Low(Vector) to High(Vector) do
    begin
      write(f,Vector[i]);
    end;
    CloseFile(f);
  except
    MessageDlg('Ошибка сохранения данных в файл!',mtError,[mbOk],0);
  end;
end;
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
02.12.2009, 22:51  [ТС]
разобрался
Delphi
1
FileExists(SaveFileDialog.FileName)
это не надо было
но почему не записывается в файл массив Vector
вот начало моей программы Ошибка в обработке динамического массива (может чем-то поможет)

Добавлено через 6 минут
И ещё вопрос
Delphi
1
2
3
4
5
for i:=Low(Vector) to High(Vector) do
    begin
      MemoResult.Lines.Add('X[' + IntToStr(i + 1) + ']=' + FloatToStrF(Vector[i],ffGeneral,5,5));
      StringGridEquals.Cells[1,i]:=FloatToStrF(Vector[i],fffixed,5,3);
    end;
В этом коде ответ даётся в мемо и табличку. так вот в табличке ничего нет
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
02.12.2009, 22:51
Потому что Vector определён прямо в этой процедуре и не инициализируется в ней - т. е. массив Vector - пустой.
Видимо предполагается, что должена быть переменная Vector, объявленная как глобальная. Но если даже такая уже есть, локальная одноимённая переменная Vector перекрывает её. В этом причина.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TMainForm.FileSaveClick(Sender: TObject);
var
  f:TextFile;  //файл со значениями
  n:integer;  //размерность матрицы
  buf:double;  //буферная переменная
  i,j:integer;  //счетчики цикла
  
  //Внимание! Эта переменная перекрывает одноимённую глобальную переменную (если она есть)
  Vector:TVector;  //одномерный массив, который надо записать в файл
begin
  ...
  //В коде переменная (массив) Vector не инициализируется, значит массив Vector является пустым.
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
02.12.2009, 22:59  [ТС]
Цитата Сообщение от Mawrat Посмотреть сообщение
Потому что Vector определён прямо в этой процедуре и не инициализируется в ней - т. е. массив Vector - пустой.
Видимо предполагается, что должена быть переменная Vector, объявленная как глобальная. Но если даже такая уже есть, локальная одноимённая переменная Vector перекрывает её. В этом причина.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
procedure TMainForm.FileSaveClick(Sender: TObject);
var
  f:TextFile;  //файл со значениями
  n:integer;  //размерность матрицы
  buf:double;  //буферная переменная
  i,j:integer;  //счетчики цикла
  
  //Внимание! Эта переменная перекрывает одноимённую глобальную переменную (если она есть)
  Vector:TVector;  //одномерный массив, который надо записать в файл
begin
  ...
  //В коде переменная (массив) Vector не инициализируется, значит массив Vector является пустым.
да, а если я её пишу как глобальную, то у меня почему процедура как-то удаляется из events и пишет что-то про метод
0
19 / 19 / 3
Регистрация: 09.06.2009
Сообщений: 95
02.12.2009, 23:17
А нельзя ли ваш текст записать в мемо а уж из мемо сохранить в файл, через компонент SaveDlg?


Вот например кнопка сохранить
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button6Click(Sender: TObject);
begin
 
if MySaveDlg.Execute then
begin
Assignfile(MyTextF,MySaveDlg.FileName);
rewrite(MyTextF);
closefile(MyTextF);
Memo2.Lines.SaveToFile(MySaveDlg.FileName);
end;
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
02.12.2009, 23:22  [ТС]
Цитата Сообщение от JUK Посмотреть сообщение
А нельзя ли ваш текст записать в мемо а уж из мемо сохранить в файл, через компонент SaveDlg?


Вот например кнопка сохранить
Delphi
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button6Click(Sender: TObject);
begin
 
if MySaveDlg.Execute then
begin
Assignfile(MyTextF,MySaveDlg.FileName);
rewrite(MyTextF);
closefile(MyTextF);
Memo2.Lines.SaveToFile(MySaveDlg.FileName);
end;
так ответ и так записывается в мемо, но что-то я из кода не понял где же используется мемо
0
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
02.12.2009, 23:24
Цитата Сообщение от Lil Crazy Посмотреть сообщение
удаляется из events
Как удаляется из events??? Lil Crazy покажи свой код - будем разбираться. (Я только завтра уже посмотрю).
Цитата Сообщение от JUK Посмотреть сообщение
А нельзя ли ваш текст записать в мемо а уж из мемо сохранить в файл, через компонент SaveDlg?
Сейчас уже другая проблема - необходимо решить вопрос с доступом к глобальной переменной Vector.
0
19 / 19 / 3
Регистрация: 09.06.2009
Сообщений: 95
03.12.2009, 01:47
Помоему задача была сохранить значения массива в текстовый файл

вот

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
.....
 
var
  Form1: TForm1;
  MyTextF:TextFile;
implementation
 
{$R *.dfm}
.......
 
procedure TForm1.Button1Click(Sender: TObject);
Var
i:integer;
begin
//записываем наш масив в memo1
//конвертируем масив, допустим масив типа integer
for i:=1 to High(Vector) do
memo1.Text:=memo1.Text+inttostr(Vector[i]);
 
if MySaveDlg.Execute then 
begin
Assignfile(MyTextF,MySaveDlg.FileName);
rewrite(MyTextF);
closefile(MyTextF);
Memo1.Lines.SaveToFile(MySaveDlg.FileName); //из memo1 в текст.файл
end;
1
 Аватар для Mawrat
13114 / 5895 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
03.12.2009, 08:02
JUK, эти строки лишние:
Delphi
1
2
3
Assignfile(MyTextF,MySaveDlg.FileName);
rewrite(MyTextF);
closefile(MyTextF);
Т. к., если используется:
Memo1.Lines.SaveToFile(MySaveDlg.FileNam e);
то файл будет создан/перезаписан самим методом SaveToFile().
1
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
03.12.2009, 16:31  [ТС]
Цитата Сообщение от Mawrat Посмотреть сообщение
Как удаляется из events??? Lil Crazy покажи свой код - будем разбираться. (Я только завтра уже посмотрю).
Вот
Delphi
1
procedure TMainForm.FileSaveClick(Sender: TObject; Vector:TVector);
Скрин в прикрёплённом файле.
Сделал так, что теперь из мемо сохраняет в файл.
И ещё - хотел бы выводить полученный массив вектор в табличку:
Delphi
1
2
3
4
5
for i:=Low(Vector) to High(Vector) do
    begin
      MemoResult.Lines.Add('X[' + IntToStr(i + 1) + ']=' + FloatToStrF(Vector[i],ffGeneral,5,5));
      StringGridEquals.Cells[1,i]:=FloatToStrF(Vector[i],fffixed,5,3);
    end;
но что-то ничего не выходит
Миниатюры
Сохранение в файл  
0
 Аватар для Lil Crazy
6 / 6 / 2
Регистрация: 23.03.2009
Сообщений: 198
03.12.2009, 21:04  [ТС]
Цитата Сообщение от Lil Crazy Посмотреть сообщение
И ещё - хотел бы выводить полученный массив вектор в табличку:
Delphi
1
2
3
4
5
for i:=Low(Vector) to High(Vector) do
    begin
      MemoResult.Lines.Add('X[' + IntToStr(i + 1) + ']=' + FloatToStrF(Vector[i],ffGeneral,5,5));
      StringGridEquals.Cells[1,i]:=FloatToStrF(Vector[i],fffixed,5,3);
    end;
но что-то ничего не выходит
не туда выводил) разобрался
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2009, 21:04
Помогаю со студенческими работами здесь

Сохранение в файл
Как сделать чтобы при сохранении файл не перезаписывался? Функцией,которая мне нужна,Memo.Lines.SaveToFile файл каждый раз...

Сохранение в файл
скажите пожалуйста, как сделать так, что бы после удачный результат сохранялся в файл?

сохранение в файл
Ребята, подскажите вот кода все нормально сохраняет но не сохраняет все данные подскажите почему? procedure TForm1.Button7Click(Sender:...

Сохранение в файл
Можно ли добавлять строку в текстовый документ без мемо? И именно ДОБАВЛЯТЬ, в текстовом файле есть уже информация и просто ниже добавить...

Сохранение в файл txt
Пожалуйста помогите! Как сохранить содержимое memo в txt с указанием пути, т.е. с запросом куда сохранять? Ну или как открыть блокнот...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 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