Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.05.2010, 15:43
twist twist вне форума
Прохожий
 
Регистрация: 13.05.2010
Сообщения: 3
Репутация: 10
Вопрос Сохранение списка документов в текстовый файл

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

Код целиком:

Код:
unit ListBuilderUnit;

//Построитель списка документов
//Главная форма

interface

uses
  FileCtrl, ShellAPI,
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtDlgs, StdCtrls, ComCtrls, ImgList, ExtCtrls, OleServer;

type
  TListBuilderForm = class(TForm)
    DirectorySelectButton: TButton;
    DirectoryEdit: TEdit;
    FileListView: TListView;
    IconImageList: TImageList;
    SaveDialog: TSaveDialog;
    Button1: TButton;
    procedure DirectorySelectButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    procedure AddFiles(Extension: string);
    procedure AddFile(FileName: string; FileSize: integer;
                      FileDateTime, Extension: string);
  public
    { Public declarations }
  end;

var
  ListBuilderForm: TListBuilderForm;

implementation

{$R *.DFM}

//Получить полное имя файла из пути к каталогу Dir и имени Name
function GetFullFileName(Dir, Name: string): string;
begin
  Result := ExcludeTrailingBackslash(Dir) + '\' + Name;
end;

//Добавить в список файл с
//именем FileName, размером FileSize, временем изменения FileDateTime,
//расширением Extension
procedure TListBuilderForm.AddFile(FileName: string; FileSize: integer;
  FileDateTime, Extension: string);
var
  NewItem: TListItem;
  FileInfo: TSHFileInfo;
begin
  Newitem := FileListView.Items.Add;
  NewItem.Caption := FileName;
  if SHGetFileInfo(PChar(GetFullFileName(DirectoryEdit.Text, FileName)), 0,
      FileInfo, sizeof(TSHFileInfo),
      SHGFI_SMALLICON or SHGFI_SYSICONINDEX) <> 0 then begin
    NewItem.ImageIndex := FileInfo.IIcon
  end else
    NewItem.ImageIndex := 0;
  NewItem.SubItems.Add(FloatToStrF(FileSize, ffNumber, 18, 0));
  NewItem.SubItems.Add(FileDateTime);
  begin
    NewItem.SubItems.Add('');
  end;
  Application.ProcessMessages;
end;

//Найти все файлы с расширением Extension и добавить их в список
procedure TListBuilderForm.AddFiles(Extension: string);
var
  SearchRec: TSearchRec;
begin
  if FindFirst(GetFullFileName(DirectoryEdit.Text, '*.' + Extension),
               faAnyFile - faDirectory, SearchRec) = 0 then begin
    AddFile(SearchRec.Name, SearchRec.Size,
            FormatDateTime('dd.mm.yy hh:nn:ss',
                           FileDateToDateTime(SearchRec.Time)), Extension);
    while FindNext(SearchRec) = 0 do begin
      AddFile(SearchRec.Name, SearchRec.Size,
              FormatDateTime('dd.mm.yy hh:nn:ss',
                             FileDateToDateTime(SearchRec.Time)), Extension);
    end;
  end;
  FindClose(SearchRec);
end;

//По созданию формы заменить обработчик ощибок
//и найти список системных иконок
procedure TListBuilderForm.FormCreate(Sender: TObject);
var
  FileInfo: TSHFileInfo;
begin
  IconImageList.Handle := SHGetFileInfo(PChar(''), 0,
    FileInfo, SizeOf(TSHFileInfo), SHGFI_SMALLICON or SHGFI_SYSICONINDEX);
end;

//По нажатию кнопки DirectorySelectButton выбрать папку
//и построить список ее файлов
procedure TListBuilderForm.DirectorySelectButtonClick(Sender: TObject);
var
  Dir: string;
begin
  if SelectDirectory('Выберите папку с документами',
                     '', Dir) then begin
    DirectoryEdit.Text := Dir;
    FileListView.Items.Clear;
    AddFiles('txt');
    AddFiles('rtf');
    AddFiles('doc');
  end;
end;

end.
До этих пор все работает, выводит список файлов. К коду прошу не передраться, возможно можно было сделать все проще, но мне нужно делать именно так, по выданному примеру.

Ну а дальше у меня ступор, как собственно все это дело сохранить в текстовый файл... Вот выложу кое-какие попытки это осуществить:
Код:
procedure TListBuilderForm.SaveDialog(Sender: TObject);
begin

if DirectoryEdit.Text <> '' then begin  //Диалог задания имени документа
    SaveDialog.InitialDir := DirectoryEdit.Text
  end else begin
    SaveDialog.InitialDir := '.';
  end;
  SaveDialog.DefaultExt := 'txt';
  SaveDialog.Filter := '*.txt|*.txt';
  SaveDialog.FileName := 'Unknown.txt';

  if SaveDialog.Execute then begin
        FileListView.Items.SaveToFile(SaveDialog.FileName);
end;end;

end.

А вот как это было в примере, в нем список сохраняется в вордовский файл, но он почемуто не работает.(Ошибка в: "WordApplication.Documents.Add(Template, NewTemplate);" )
Код:
//По нажатию кнопки WordExportButton сохранить список
//в документ DOC Microsoft Word 
procedure TListBuilderForm.WordExportButtonClick(Sender: TObject);
var
  Template, NewTemplate, ItemIndex,
  WordFileName, AlignTab, TabLeader: OleVariant;
  k: Integer;
  WordString: string;
begin
  if DirectoryEdit.Text <> '' then begin  //Диалог задания имени документа
    SaveDialog.InitialDir := DirectoryEdit.Text
  end else begin
    SaveDialog.InitialDir := '.';
  end;
  SaveDialog.DefaultExt := 'doc';
  SaveDialog.Filter := '*.doc|*.doc';
  SaveDialog.FileName := 'Unknown.doc';
  if SaveDialog.Execute then begin
    if SaveDialog.FileName <> '' then begin
      try
        WordApplication.Connect;     //Запустить Word
        Template := 'EmptyParam';
        NewTemplate := false;
        WordApplication.Documents.Add(Template, NewTemplate);
        ItemIndex := 1;
        WordDocument.ConnectTo(WordApplication.Documents.Item(ItemIndex));
                          //Абзац без отступа с одинарным интервалом строк
        WordApplication.Selection.ParagraphFormat.LineSpacingRule :=
          wdLineSpaceSingle;
        WordApplication.Selection.ParagraphFormat.FirstLineIndent := 0;
                                     //Табуляции и размер шрифта
        TabLeader := wdTabLeaderSpaces;
        AlignTab := wdAlignTabRight;
        WordApplication.Selection.ParagraphFormat.TabStops.Add(
          WordApplication.CentimetersToPoints(10) ,AlignTab ,TabLeader);
        AlignTab := wdAlignTabLeft;
        WordApplication.Selection.ParagraphFormat.TabStops.Add(
          WordApplication.CentimetersToPoints(10.3) ,AlignTab ,TabLeader);
        AlignTab := wdAlignTabRight;
        WordApplication.Selection.ParagraphFormat.TabStops.Add(
          WordApplication.CentimetersToPoints(17.7) ,AlignTab ,TabLeader);
        WordApplication.Selection.Font.Size := 8;
                                     //Путь к папке
        WordString := SaveDialog.InitialDir;
        WordApplication.Selection.TypeText(WordString);
        WordApplication.Selection.TypeParagraph;
        WordApplication.Selection.TypeParagraph;
        if FileListView.Items.Count > 0 then begin
                                     //Заголовок списка
          WordString := 'Имя' + Chr(9) + 'Размер, байт' + Chr(9) +
                        'Изменен' + Chr(9) + 'Параметры';
          WordApplication.Selection.TypeText(WordString);
          WordApplication.Selection.TypeParagraph;
          WordString := '---------------------------------------------------------------------------------------------------------';
          WordApplication.Selection.TypeText(WordString);
          WordApplication.Selection.TypeParagraph;
                                     //Текст списка
          for k := 0 to FileListView.Items.Count - 1 do begin
            WordString := FileListView.Items.Item[k].Caption + Chr(9) +
                          FileListView.Items.Item[k].SubItems[0] + Chr(9) +
                          FileListView.Items.Item[k].SubItems[1] + Chr(9) +
                          FileListView.Items.Item[k].SubItems[2];
            WordApplication.Selection.TypeText(WordString);
            WordApplication.Selection.TypeParagraph;
          end;
        end;
                                     //Сохранить документ и закрыть Word
        WordFileName := SaveDialog.FileName;
        WordDocument.SaveAs(WordFileName);
        WordApplication.Quit;
        WordApplication.Disconnect;
      except
        MessageDlg('Ошибка. Возможно, Word не установлен.',
                   mtError, [mbOk], 0);
      end;
    end;
  end;
end;

Мне хотя бы все это дело научить сохраняться в простой текстовый файл, ну или может кто выяснит почему несохраняет в вордовский. Надеюсь на вашу помощь...

Последний раз редактировалось twist, 13.05.2010 в 17:14.
Ответить с цитированием
  #2  
Старый 13.05.2010, 17:26
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Можно обявить глобально переменную строкового типа ну например S. При загрузке нового файла просто добовлять его название в переменную примерно так:
Код:
s:=s+'Имя файла'+#13;
А когда тебе надо просто сохранить эту переменнув файл и все
__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
  #3  
Старый 13.05.2010, 17:54
twist twist вне форума
Прохожий
 
Регистрация: 13.05.2010
Сообщения: 3
Репутация: 10
По умолчанию

Цитата:
Сообщение от Bars1992
Можно обявить глобально переменную строкового типа ну например S. При загрузке нового файла просто добовлять его название в переменную примерно так:
Код:
s:=s+'Имя файла'+#13;
А когда тебе надо просто сохранить эту переменнув файл и все
если честно мне это мало о чем говорит, знания дельфи уж оочень поверхностные, можешь это както к моему коду привязать?
Ответить с цитированием
  #4  
Старый 13.05.2010, 22:46
twist twist вне форума
Прохожий
 
Регистрация: 13.05.2010
Сообщения: 3
Репутация: 10
По умолчанию

Вобщем с сохранением разобрался, но появился еще один вопрос: в этом списке у меня выводит - имя файла, его размер, дату последнего изменения. Но мне еще нужно чтобы выводило "первые N непустых строк документа", т.е первые пару слов текстового документа, типа превью. Как это сделать ума не приложу... Кто что посоветует?
Ответить с цитированием
  #5  
Старый 14.05.2010, 15:31
Аватар для Bars1992
Bars1992 Bars1992 вне форума
Активный
 
Регистрация: 24.04.2010
Адрес: Украина, Кременчуг
Сообщения: 249
Репутация: 22
По умолчанию

Ты имеешь введу выводило в файл? если да то код:
Код:
writeln(файловая переменная,'текст строки');
И так сколько угодно строк)
__________________
Не твори зла, и жизнь повернется к тебе передом
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 10:58.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025