使用TEdit字段指定生成的文件数量

时间:2014-01-04 13:36:32

标签: delphi delphi-xe5

在XE5中我已经创建了应用程序,默认情况下使用OnShow函数加载带有多行的小 txt 文件。 还有1个 TEdit1 字段,默认值= 300 ,TButton将文件保存在已定义的目录中。

怎么可能: 1.)使用TEdit1字段中的值来获取该指定目录中的文件数量,如果需要可以更改值; 2.)所有生成的文件应该是:1.txt,2.txt,3.txt ......等。

现在按钮功能是:

procedure TForm1.GenerateClick(Sender: TObject);
var
  dirName : String;
begin
  // Create a new directory
  dirName := 'gen';
  if DirectoryExists(dirName)
then
  Memo1.Lines.SaveToFile('gen\default.txt')
else
  CreateDir(dirName);
  Memo1.Lines.SaveToFile('gen\default.txt');
end;

祝你好运, ģ


整个工作代码:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IOUtils, Vcl.ComCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    SaveFile: TButton;
    Generate: TButton;
    Memo1: TMemo;
    procedure LoadFile(Sender: TObject);
    procedure SaveFileClick(Sender: TObject);
    procedure GenerateClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.LoadFile(Sender: TObject);
begin
if FileExists('template.txt')then begin
Memo1.Lines.LoadFromFile('template.txt');
  end
  else
    ShowMessage('Cant find template.txt, add text and use SAVE button !!!');
end;

procedure TForm1.SaveFileClick(Sender: TObject);
begin
Memo1.Lines.SaveToFile('template.txt');
end;

procedure TForm1.GenerateClick(Sender: TObject);
var
  dirName, fName : String;
  i, max: integer;
begin
  // Create a new directory
  dirName := 'gen';

  if NOT DirectoryExists(dirName) then
    CreateDir(dirName);

  fName := Edit1.Text;
  max := StrToInt(fName);

  for i := 1 to max do begin
    fName := dirName + '\'+ IntToStr(i) + '.txt';
    Memo1.Lines.SaveToFile( fName );
  end;

end;
end.

谢谢:)

1 个答案:

答案 0 :(得分:1)

将数据存储在可视组件中的想法有点臭。但是如果你坚持 - 那么你可以在.TAG属性中存储整数值。但是没关系,请在下方了解一些休闲功能,并了解beginend个关键字:

更新:将相对名称转换为完全限定的ForceDirectories。使用过的功能:

使用Delphi提供的现成功能的代码变为:

procedure TForm1.GenerateClick(Sender: TObject);
var
  dirName, fName : String;
  i, max: integer;
begin
  // Create a new directory
  dirName := 'gen';

  dirName := ExpandUNCFileName(dirName); 
  // converting possible relative path to absolute

  dirName := IncludeTrailingPathDelimiter(GetCurrentDir) + dirName;
  // yet another way to do the same, as above
  // GCD function would return paths like "C:\" or like "C:\Users\Name\Documents"
  // so we don't know in advance if there would be slash at the end or not

  ForceDirectories(dirName);

  fName := EditField.Text;
  max := StrToInt(fName);

  // even better:  max := EditField.Tag; and change TAG property, not TEXT in IDE

  for i := 1 to max do begin
    fName := dirName + PathDelimiter + IntToStr(i) + '.txt';
    MemoField.Lines.SaveToFile( fName );
  end;

end;

也可以调用TDirectory.CreateDirectory(dirName);而不是ForceDirectories,但我现在无法检查前者是否使用相对路径,或者在调用之前还需要路径扩展。如果可以 - 则未更改的dirName将是有效参数以直接调用该函数。


你原来的功能实际上有一个奇怪的,破碎的结构。双击保存。我在下面的原始代码的正确结构下方便阅读:

procedure TForm1.GenerateClick(Sender: TObject);
var
  dirName : String;
begin
  // Create a new directory
  dirName := 'gen';

  if DirectoryExists(dirName)
  then
    Memo1.Lines.SaveToFile('gen\default.txt')
  else
    CreateDir(dirName);

  Memo1.Lines.SaveToFile('gen\default.txt');
end;