有关于DELPHI处理文件格式数据的问题

[复制链接]
查看11 | 回复1 | 2011-3-5 03:16:16 | 显示全部楼层 |阅读模式
582.8
582.8
582.8
582.8
582.7
582.7
582.6
582.5
582.3
582.1

582.0
581.9
581.9
582.1
581.9
581.8
581.8
581.8
581.9
582.1

582.3
582.5
582.6
582.5
582.7
582.7
582.5
582.6
582.5
582.7

582.9
583.2
583.6
583.9
584.1
584.3
584.2
584.2
584.1
584.3

584.5
585.0
585.3
585.6
585.3
585.4
585.7
585.8
585.8
586.0

586.6
586.7
586.6
586.7
586.8
586.7
586.6
586.6
587.1
587.0

586.9
586.8
586.8
586.6
586.4
586.4
586.1
585.7
585.2
585.1

585.2
585.0
584.5
584.0
584.1
584.3
584.0
583.9
583.6
584.0

584.2
583.8
583.7
583.6
583.3
583.2
583.1
583.2
582.7
582.6

582.5
582.5
582.7
582.7
582.8
583.1
583.3
583.5
583.5
583.6

583.7
583.3
583.3
583.1
583.4
583.7
583.4
583.4
583.6
583.9

583.9
584.1
583.9
583.8
583.8
583.8
583.9
583.5
584.1
584.1

584.8
584.8
584.6
584.9
585.3
585.0
585.6
585.3
585.4
585.6

585.6
585.3
585.0
584.5
584.1
584.0
584.0
584.1
583.8
583.5

583.8
583.6
583.0
583.1
582.8


582.7
582.5
582.5
582.5
582.3
582.2
582.4
582.3
582.2
581.9

582.0
582.1
582.1
581.8
581.7
581.6
581.3
581.5
581.6
582.0

582.1
582.3
582.4
582.5
582.6
582.5
582.4
582.5
582.3
582.5

582.7
582.6
583.2
583.6
583.8
584.1
584.5
584.0
584.1
584.1

584.6
585.2
585.7
585.9
585.6
585.6
585.7
585.7
586.0
586.2

586.5
586.5
586.9
586.6
587.1
587.1
586.8
586.9
586.8
586.6

586.4
586.5
586.5
586.4
586.3
586.1
586.1
585.9
585.3
584.9

585.1
585.0
584.9
584.3
584.3
584.2
584.1
583.9
583.6
583.7

583.6
583.6
583.6
583.6
583.5
583.3
583.0
583.0
583.0
582.7

582.5
582.3
582.3
582.5
582.5
582.6
582.8
582.8
583.0
583.4

583.3
582.9
582.8
582.9
583.3
583.3
583.1
583.4
583.6
584.0

583.9
583.7
583.6
583.4
583.5
583.2
583.1
584.0
584.0
584.1

584.2
584.6
584.5
584.5
585.3
585.1
585.8
585.7
585.6
585.6

586.0
585.8
585.2
584.7
584.5
584.2
583.9
584.5
583.8
583.7

583.7
583.4
583.0
582.8
582.7

这样两组的TXT数据如何操作能让下面一组减去上面一组结果再存到另一个TXT格式的文件中去呢?
回复

使用道具 举报

千问 | 2011-3-5 03:16:16 | 显示全部楼层
<pre id=\"best-answer-content\" class=\"reply-text mb10\">program arraySub;

{$APPTYPE CONSOLE}

uses Classes, SysUtils;

procedure ShowUsageAndExit;
const
C_sUsageFormat : string =

\'功能:数据组减法,两组数据来自两个文本文件\'#$0D#$0A

\'用法: %s 文件1 文件2\'#$0D#$0A

\'说明:运算结果将输出到屏幕,如需保存为文件,请用IO重定向\';
var
s : string;
begin
s := ChangeFileExt( ExtractFileName( ParamStr(0) ), \'\' );
s := Format( C_sUsageFormat, [ s ] );
Writeln( ErrOutput, s );
Halt;
end;

function GetCmdArguments( var sFN_1, sFN_2 : string ) : Boolean;
begin
Result := False;
if ParamCount2 then

Exit;
sFN_1 := ParamStr(1);
if not FileExists( sFN_1 ) then

Exit;
sFN_2 := ParamStr(2);
if not FileExists( sFN_2 ) then

Exit;
Result := True;
end;

function ScanNumberBeginning( P : PByte; nByteLimit : Integer ) : PByte;
begin
Result := P;
while nByteLimit0 do
begin

case Result^ of

Ord( \'.\' ), Ord( \'0\' )..Ord( \'9\' ): Exit;

else

Inc( Result );

end;

Dec( nByteLimit );
end;
Result := nil;
end;

function ReadANumberString( var P : PByte; nByteLimit : Integer ) : string;
begin
Result := \'\';
while nByteLimit0 do
begin

case P^ of

Ord( \'.\' ), Ord( \'0\' )..Ord( \'9\' ): Result := Result Chr( P^ );

else

Exit;

end;

Inc( P );

Dec( nByteLimit );
end;
end;

type
TArray_Double = array of Double;

function DataToArray( P0 : PByte; nLength: Integer; var afResult : TArray_Double ) : Integer;
var
P : PByte;
s : string;
begin
Result := 0;
P := ScanNumberBeginning( P0, nLength );
Dec( nLength, PChar( P ) - PChar( P0 ) );
while Pnil do
begin

s := ReadANumberString( P, nLength );

if s = \'\' then

Exit;

SetLength( afResult, Result 1 );

afResult[ Result ] := StrToFloat( s );

Inc( Result );

P0 := P;

P := ScanNumberBeginning( P0, nLength );

Dec( nLength, PChar( P ) - PChar( P0 ) );
end;
end;

procedure PrintResult( afData : TArray_Double; nNumberPerLine : Integer = 10 );
var
i : Integer;
begin
if nNumberPerLine = 1 then

nNumberPerLine := 1;
for i := 0 to High( afData ) do
begin

Write( Format( \'%7.1n\', [ afData ] ) );

if ( i 1 ) mod nNumberPerLine = 0 then

Writeln;
end;
Writeln;
end;

var
sFN_Data1: string;
sFN_Data2: string;
ms1 : TMemoryStream;
ms2 : TMemoryStream;
af1 : TArray_Double;
af2 : TArray_Double;
afX : TArray_Double;
i, n1, n2 : Integer;
begin
if not GetCmdArguments( sFN_Data1, sFN_Data2 ) then

ShowUsageAndExit;

ms1 := TMemoryStream.Create;
ms2 := TMemoryStream.Create;
try

ms1.LoadFromFile( sFN_Data1 );

ms2.LoadFromFile( sFN_Data2 );

n1 := DataToArray( ms1.Memory, ms1.Size, af1 );

n2 := DataToArray( ms2.Memory, ms2.Size, af2 );

if n1 = n2 then

begin

SetLength( afX, n1 );

for i := 0 to n1 - 1 do

afX := af2 - af1;

PrintResult( afX );

end

else

Writeln( ErrOutput, \'两组数据个数不同,请检查原始数据文件...\' );
finally

ms2.Free;

ms1.Free;
end;
end.

执行方法:arraySub 1.txt 2.txtresult.txt
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行