每行一串字符,然后随机行序输出。
谢谢了

解决方案 »

  1.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        btLoadFile: TButton;
        btRandom: TButton;
        btSaveFile: TButton;
        procedure btLoadFileClick(Sender: TObject);
        procedure FormCreate(Sender: TObject);
        procedure btRandomClick(Sender: TObject);
        procedure btSaveFileClick(Sender: TObject);
        function  RandomStr(sourceStr: string): string;
      private
        { Private declarations }
        myStringList: TStringList;
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}//读文件
    procedure TForm1.btLoadFileClick(Sender: TObject);
    var
        myOpenDialog: TOpenDialog;
    begin
        myOpenDialog := TOpenDialog.Create(self);
        myOpenDialog.Filter := 'Text files (*.txt)|*.TXT';
        if myOpenDialog.Execute then
        begin
            myStringList.LoadFromFile(myOpenDialog.FileName);
            Showmessage('读取文件完成!');
        end;
        myOpenDialog.Free;
    end;//创建
    procedure TForm1.FormCreate(Sender: TObject);
    begin
        myStringList := TStringList.Create;
    end;//打乱顺序
    procedure TForm1.btRandomClick(Sender: TObject);
    var
        i: integer;
    begin
        for i := myStringList.Count - 1 downto 0 do
        begin
            myStringList.Strings[i] := RandomStr(myStringList.Strings[i]);
        end;
        showmessage('文件内容已经打乱!');
    end;//保存文件
    procedure TForm1.btSaveFileClick(Sender: TObject);
    var
        mySaveDialog: TSaveDialog;
    begin
        mySaveDialog := TSaveDialog.Create(self);
        mySaveDialog.Filter := 'Text files (*.txt)|*.TXT';
        if mySaveDialog.Execute then
        begin
            myStringList.SaveToFile(mySaveDialog.FileName);
            showmessage('文件保存完成!');
        end;
        mySaveDialog.Free;
    end;//打乱顺序的算法
    function TForm1.RandomStr(sourceStr: string): string;
    function NumExist(arrName: array of integer; arrLen: integer; Num: integer): Boolean;
    var
        i: integer;
    begin
        result := False;
        for i := arrLen - 1 downto 0 do
        begin
            if arrName[i] = Num then
            begin
                result := True;
            end;
        end;
    end;
    var
        i, tempInt: integer;
        tempArr: array of integer;
    begin
        randomize;
        SetLength(tempArr, Length(sourceStr));
        for i := Length(sourceStr) - 1 downto 0 do
        begin
            tempArr[i] := -1;
        end;
        for i := Length(sourceStr) - 1 downto 0 do
        begin
            repeat
                tempInt := random(Length(sourceStr));
            until not NumExist(tempArr, Length(tempArr), tempInt);
            tempArr[i] := tempInt;
        end;
        for i := Length(sourceStr) - 1 downto 0 do
        begin
            result := result + sourceStr[tempArr[i] + 1];
        end;
    end;end.