Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/201: Рейтинг темы: голосов - 201, средняя оценка - 4.92
6 / 6 / 0
Регистрация: 07.05.2011
Сообщений: 84
1

Открытие файла и работа с ним (opendialog)

24.07.2011, 11:39. Показов 37007. Ответов 11
Метки нет (Все метки)

Здравствуйте.
Подскажите пожалуйста каким образом работать с файлом, открытым opendialog ?
Если заносить его сначала в мемо, то все понятно
Delphi
1
 memo1.Lines.LoadFromFile(opendialog1.FileName)
а можно как-то обойтись без мемо и текстовый файл записать в какую-то переменную и с ней уже работать?
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.07.2011, 11:39
Ответы с готовыми решениями:

Открытие файла и работа с ним (opendialog) | TStringList
Пытаюсь загрузить из выбранного файла строки в TStringList, делаю это следующим образом: ...

OpenDialog - как с ним работать
Доброе всем утро... Люди помогите... Осваиваю Delpfi самостоятельно, многое получается, но тут -...

Открытие через OpenDialog в memo
Делаю свой текстовый редактор и никак не могу сделать нормальное открытие через OpenDialog в...

Считывание с бинарного файла большого массива и дальнейшая работа с ним
Здравствуйте. Подскажите пожалуйста. В общем передо мной стоит задача считать информацию из...

11
5576 / 2182 / 456
Регистрация: 20.11.2009
Сообщений: 7,265
Записей в блоге: 1
24.07.2011, 11:42 2
Delphi
1
2
3
4
5
6
7
8
9
10
var F: TextFile;
---
 
if OpenDialog.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
Write(F, 'Hello World');
CloseFile(F);
end;
через открытие диалога выбираем файл, далее привязываемся к нему, теперь есть файл с которым программа может работать, и записываем в него Hello World
0
203 / 145 / 16
Регистрация: 13.01.2009
Сообщений: 554
24.07.2011, 11:43 3
можно

Delphi
1
2
3
4
5
if openDialog.Execute then 
begin
//здесь работаем с файлом
 openDialog.FileName // имя файла
end
0
Модератор
64056 / 47472 / 32727
Регистрация: 18.05.2008
Сообщений: 115,185
24.07.2011, 11:46 4
Arcor, Если записываем то
Delphi
1
Append(F);
0
6 / 6 / 0
Регистрация: 07.05.2011
Сообщений: 84
24.07.2011, 11:48  [ТС] 5
большое спасибо, с этим все понял.
И можно еще один вопрос: как работать с вордом?
Программой открывается файл .doc , но там символы. может в uses что-то надо дописать или с самим файлом работать иначе?
0
5576 / 2182 / 456
Регистрация: 20.11.2009
Сообщений: 7,265
Записей в блоге: 1
24.07.2011, 11:56 6
упс.. я без дельфя писал, промахнулся, исправлю сейчас

Delphi
1
2
3
4
5
6
7
8
9
10
11
var F: TextFile;
---
 
if OpenDialog.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Rewrite(F);
Write(F, 'Hello World');
Reset(F);
CloseFile(F);
end;
Rewrite(F); - для перезаписи. т.е. что бы ни записывали будет перезаписывать файл
Append(F); - для добавления в файл, будет добавляться запись постоянно в конец

Добавлено через 7 минут
Цитата Сообщение от seliarn Посмотреть сообщение
как работать с вордом
сложно

есть еще формат похожий на вордовский, только .rtf, с этим форматом умеет работать компонент TRichEdit
0
13073 / 5858 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
24.07.2011, 12:06 7
Загрузка всего содержимого файла в строку:
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
procedure TForm1.Button1Click(Sender: TObject);
var
  F : File;
  S : String; //S : AnsiString;
  Len : Integer;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath(ParamStr(0))
  ;
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    MessageDlg(
      'Указанный файл не найден. Действие отменено.'
      ,mtWarning, [mbYes], 0
    );
    Exit;
  end;
 
  //Связываем файловую переменную с именем файла.
  AssignFile(F, Od.FileName);
  //Открываем файл в режиме минимального блока в 1 байт.
  Reset(F, 1); //Reset(F, SizeOf(Char));
  //Определяем размер файла. Размер будет определён в минимальных
  //блоках. А минимальным блок мы выше определили в 1 байт.
  //Т. е., получим размер в байтах.
  Len := FileSize(F);
  //Устанавливаем длину строки равной размеру файла в байтах.
  SetLength(S, Len);
  //Читаем всё содержимое файла в строку.
  BlockRead(F, Pointer(S)^, Len);
  //Закрываем файл.
  CloseFile(F);
 
  //Теперь, всё содержимое файла загружено в строку S.
  //Например, загрузим эту строку в Мемо.
  Memo1.Text := S;
end;
Цитата Сообщение от seliarn Посмотреть сообщение
как работать с вордом?
С MS Word следует работать с помощью OLE технологии.
Например, так можно записать текст из Мемо в конец документа MS Word:
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
uses
  ComObj;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  wdApp, wdDocs, wdDoc : Variant;
  S : String;
  Od : TOpenDialog;
begin
  Od := OpenDialog1;
 
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath(ParamStr(0))
  ;
  if not Od.Execute then Exit;
  if not FileExists(Od.FileName) then begin
    ShowMessage(
      'Файл с именем:'#10
      + Od.FileName + #10
      + 'Не найден. Действие отменено.'
    );
    Exit;
  end;
  try
    wdApp := CreateOleObject('Word.Application');
  except
    ShowMessage('Не удалось запустить MS Word. Действие отменено.');
    Exit;
  end;
 
  try
    //Делаем видимым окно MS Word.
    wdApp.Visible := True;
    //Ссылка на коллекцию документов.
    wdDocs := wdApp.Documents;
    //Попытка открыть выбранный файл.
    wdDoc := wdDocs.Open(FileName:=Od.FileName);
    //Создание нового документа. Если параметр Template:='...' не задан,
    //то новый документ создаётся по шаблону Normal.Dot.
    //wdDoc := wdDocs.Add;
    //Добавляем пустую строку в конец документа.
    wdDoc.Range.InsertAfter(#10);
    //Добавляем текст в конец документа.
    S := Memo1.Text;
    wdDoc.Range.InsertAfter(S);
    //Закрываем MS Word.
    //wdApp.Quit;
  finally
    wdApp := Unassigned;
    wdDocs := Unassigned;
    wdDoc := Unassigned;
  end;
end;
Чтобы успешно применять OLE в отношении MS Word, надо иметь представление об объектной модели Word и о программировании в VBA.
0
6 / 6 / 0
Регистрация: 07.05.2011
Сообщений: 84
24.07.2011, 12:23  [ТС] 8





Большое спасибо за ответы.Буду разбираться..
0
Житель Земли
2887 / 2806 / 380
Регистрация: 26.07.2011
Сообщений: 10,972
Записей в блоге: 1
26.07.2011, 17:15 9
Можно еще загрузить файл в список сторок TStringList и работать с ним. Очень удобно выполнять функции поика, замены, работу со строками. Мощное средство работы с текстом.
А после работы сохранить в файл.
Delphi
1
2
3
4
5
6
7
8
9
10
var
  s: TStringList;
begin
  s:= TStringList.Create;
  s.LoadFromFile(OpenDialog.FileName);
  // удаляем первую строку
  s.Delete(0);
  s.SaveToFile('myfile.txt');
  s.Free;
end;
0
1383 / 1154 / 215
Регистрация: 04.04.2011
Сообщений: 4,013
27.07.2011, 12:57 10
Delphi
1
Можно еще загрузить файл в список сторок TStringList и работать с ним
Конечно. Только необходимо помнить, что размер такого файла должен быть небольшим (несколько десятков тыс. строк, не более)
0
Житель Земли
2887 / 2806 / 380
Регистрация: 26.07.2011
Сообщений: 10,972
Записей в блоге: 1
27.07.2011, 15:33 11
Цитата Сообщение от MsGuns Посмотреть сообщение
Delphi
1
Можно еще загрузить файл в список сторок TStringList и работать с ним
Конечно. Только необходимо помнить, что размер такого файла должен быть небольшим (несколько десятков тыс. строк, не более)
Ну, для большинства задач и этого хватает. Тем более для начинающих
0
13073 / 5858 / 1706
Регистрация: 19.09.2009
Сообщений: 8,807
27.07.2011, 16:30 12
Цитата Сообщение от MsGuns Посмотреть сообщение
несколько десятков тыс. строк, не более
MsGuns, в случае адресного пространства процесса в 2 Гбайта, TStringList около 20 миллионов строк сможет загрузить. Даже немного больше. Если считать, что в среднем в строке 75 символов, то получим следующий расклад:
Метаданные строки: 12 байт.
Указатель на строку: 4 бата.
Данные строки: 75 байт.
Итого: 91 байт на одну строку.
Тогда 1 000 000 строк в памяти займут: 91 * 1 000 000 = 91 000 000 = 91 Мегабайт.
Тогда 20 миллионов строк займут в памяти область: 91 * 20 = 1 820 Мегабайта = 1,82 Гигабайта.
Причём, область может быть непрерывной. Поэтому вполне такой объём TStringList может загрузить.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2011, 16:30

Открытие файлов через OpenDialog без участия пользователя
А возможно ли миновать этот этап выбора файлов? Что бы просто, скажем, по нажатию кнопки все в...

Работа с OpenDialog
в программе нужно выбирать файл посредством OpenDialog (и вывод в стринггрид), как это реализовать?...

Работа с OpenDialog
Ребят, кому не трудно, подскажите как написать открытие файла через OpenDialog? Пишу курсовую,...

Работа с OpenDialog
Глупый вопрос, но все таки... Передаю файл на FTP таким кодом idFTP1.Put('Test.txt', 'test.txt',...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.