program floatfloat;
{$MODE OBJFPC}{$H+}
uses
Classes, SysUtils, StrUtils;
procedure Info(S: String; const F: array of const);
begin
WriteLn('Info: ', Format(S, F));
end;
procedure Error(S: String; const F: array of const);
begin
WriteLn('Error: ', Format(S, F));
end;
procedure Test(Lines: TStrings);
const
worddelim = ['|'];
radixdelim = ['.', ','];
var
line_no : integer = 0;
line : string;
nr_words_in_line : integer;
float_part_count : integer;
float_integer_part : string;
float_fractional_part : string;
bit1, newbit1 : string;
bit2, newbit2 : string;
lat1, lat2 : double;
begin
for line in Lines do
begin
inc(line_no);
nr_words_in_line := WordCount(line, worddelim);
if (nr_words_in_line = 7) then
begin
// have float bit1
bit1 := ExtractWord(6, line, worddelim);
float_part_count := WordCount(bit1, radixdelim);
if (float_part_count = 2) then
begin
float_integer_part := ExtractWord(1, bit1, radixdelim);
float_fractional_part := ExtractWord(2, bit1, radixdelim);
newbit1 := float_integer_part + DefaultFormatSettings.DecimalSeparator + float_fractional_part;
if TryStrToFloat(newbit1, lat1)
then Info('line %d have %s valid float value = %f', [line_no, 'bit1', lat1])
else Error('have error data %s. Not have validate float "%s" line = %d', ['bit1', bit1, line_no]);
end
else Error('have error data %s. Not have validate float "%s" line = %d', ['bit1', bit1, line_no]);
// have float bit2
bit2 := ExtractWord(7, line, worddelim);
float_part_count := WordCount(bit2, radixdelim);
if (float_part_count = 2) then
begin
float_integer_part := ExtractWord(1, bit2, radixdelim);
float_fractional_part := ExtractWord(2, bit2, radixdelim);
newbit2 := float_integer_part + DefaultFormatSettings.DecimalSeparator + float_fractional_part;
if TryStrToFloat(newbit2, lat2)
then Info('line %d have %s valid float value = %f', [line_no, 'bit2', lat2])
else Error('have error data %s. Not have validate float "%s" line = %d', ['bit2', bit2, line_no]);
end
else Error('have error data %s. Not have validate float "%s" line = %d', ['bit2', bit2, line_no]);
end
else Error('not know line %d and have %d word', [line_no, nr_words_in_line]);
end;
end;
var
data: TStringList;
begin
data := TStringList.Create;
data.append('|00CA||7826300||Barstow||United States||K2||35,349333||-116,893333|');
data.append('|7826300||Barstow||United States||K2||35,349333||-116,893333|');
data.append('|00CA||7826300||Barstow||United States||K2||35.349333||-116.893333|');
data.append('|1||hello||12345||67,78||1111K2||fun||calculate|');
data.append('|00CA||7826300||Barstow||United States||K2||35,349333||-116.893333|');
data.append('|00CA||7826300||Barstow||United States||K2||35.349333||-116,893333|');
// make many append data for want test
Test(data);
data.free;
end.