⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 文件格式转换,用于拓普康全站仪传输数据格式转换成清华三维EPSW98的格式.
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Memo2: TMemo;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    function SplitString(const Source,ch:string):TStringList;//分割字符串函数
    procedure Perround;   //主处理过程
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
    if OpenDialog1.Execute then
       begin
       Memo1.Lines.loadfromFile(openDialog1.filename);
       end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
    Perround; //调用处理函数
    Memo2.Lines.Add('0!');
end;

function TForm1.SplitString(const Source, ch: string): TStringList;
var
  temp:String;
  i:Integer;
begin
  Result:=TStringList.Create;
  //如果是空自符串则返回空列表
  if Source=''
  then exit;
  temp:=Source;
  i:=pos(ch,Source);
  while i<>0 do
  begin
     Result.add(copy(temp,0,i-1));
     Delete(temp,1,i);
     i:=pos(ch,temp);
  end;
  Result.add(temp);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
    IF SaveDialog1.Execute Then
       Memo2.Lines.SaveToFile(SaveDialog1.FileName);
end;

procedure TForm1.Perround;
var One,Two,No,Three:String;
    i,j:integer;
    ok,ok1:TStringList;
begin

    ok:= TStringList.Create ;  //初始化
    ok1:=TStringList.Create ;
    For i:=0 to Memo1.Lines.Count-1 Do
      Begin
        IF Copy(Memo1.lines[i],1,3)='STN' Then   //处理重复STN问题
        Begin

           //处理附加数据行
           IF Copy(Memo1.Lines[i+1],1,2)<>'BS' Then
              Begin
               Memo1.Lines.Delete(i+1);
               PerRound;//递归调用循环体
               Exit;
              End;
           //处理附加数据行结束
           IF Memo2.Lines.Count>0 Then  Memo2.Lines.Add('0!');
           
           One:=copy(Memo1.Lines[i],9,Length(Memo1.Lines[i])-8);
           ok:=SplitString(One,',') ;
           Two:=copy(Memo1.Lines[i+1],9,Length(Memo1.Lines[i+1])-8);
           ok1:=SplitString(two,',') ;
           Memo2.Lines.Add('0s:'+ok[0]+':'+ok[1]+':'+ok1[0]);

           For J:=I+2 DownTo 0 Do
             Begin
               Memo1.Lines.Delete(J);
             End;
         
           ok.Free;
           ok1.Free;
           PerRound;//递归调用循环体
           exit;
           End;

        IF Copy(Memo1.Lines[i],1,4)<>'OK! ' Then
        Begin

        IF ODD(i) Then
           Begin
           No:=Copy(Memo1.Lines[i-1],9,Length(Memo1.Lines[i])-8);
           ok:=SplitString(No,',') ;  //分割奇数行
           Three:=Copy(Memo1.Lines[i],9,Length(Memo1.Lines[i])-8);
           ok1:=SplitString(Three,',') ;  //分割偶数行
           IF StrtoFloat(ok[1])=0 Then
           Memo2.Lines.Add('00:'+ok.Strings[0]+'::'+ok.Strings[2]+': '+ok1[0]+': '+ok1[1]+': '+ok1[2]+':-9999:1:1:0:0::::')
           Else
           Memo2.Lines.Add('00:'+ok.Strings[0]+'::'+ok.Strings[2]+': '+ok1[0]+': '+ok1[1]+': '+ok1[2]+':'+ok[1]+':1:1:1:1::::');
           
           Memo1.Lines[i-1]:= 'OK! '+Memo1.Lines[i-1];
           Memo1.Lines[i]:= 'OK! '+Memo1.Lines[i];
           End;
        End;
      End;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
   Memo2.Lines.Clear;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -