unit Unit2; interface Type Directory=record Name: string[25]; Address: record Street: string[15]; Home: integer; Rented: integer; end; Nomber: integer; end; procedure CreateFileOfRecord; procedure CreateTextFile; implementation function Trim(S: string): string; var I, L: Integer; begin L := Length(S); I := 1; while (I <= L) and (S[I] <= ' ') do Inc(I); if I > L then Trim := '' else begin while S[L] <= ' ' do Dec(L); Trim := Copy(S, I, L - I + 1); end; end; function PadRight(S: string; Len: Integer; C: Char): string; var tmp: String; begin tmp := S; while Length(tmp) < Len do tmp := tmp + C; PadRight := tmp; end; function PadLeft(S: string; Len: Integer; C: Char): string; var tmp: String; begin tmp := S; while Length(tmp) < Len do tmp := C + tmp; PadLeft := tmp; end; function ParseText(aInString: String): Directory; var aDirectory: Directory; aErrorCode: Integer; aIntValue: Integer; begin aDirectory.Name := copy(aInString, 1, 25); aDirectory.Address.Street := copy(aInString, 26, 15); val(Trim(copy(aInString, 41, 4)), aIntValue, aErrorCode); if aErrorCode = 0 then aDirectory.Address.Home := aIntValue; val(Trim(copy(aInString, 46, 4)), aIntValue, aErrorCode); if aErrorCode = 0 then aDirectory.Address.Rented := aIntValue; val(Trim(copy(aInString, 51, 4)), aIntValue, aErrorCode); if aErrorCode = 0 then aDirectory.Nomber := aIntValue; ParseText := aDirectory; end; procedure CreateFileOfRecord; var aFileOfRecords: file of Directory; aTextFile: TextFile; aFileString: String; aDirectory: Directory; begin AssignFile(aFileOfRecords, 'd:\test\out.dat'); Rewrite(aFileOfRecords); AssignFile(aTextFile, 'd:\test\in.txt'); Reset(aTextFile); while not Eof(aTextFile) do begin Readln(aTextFile, aFileString); aDirectory := ParseText(aFileString); Write(aFileOfRecords, aDirectory); end; CloseFile(aTextFile); CloseFile(aFileOfRecords); end; function ToStr(Value: Integer): String; var Res: String; begin Str(Value, Res); ToStr := Res; end; procedure CreateTextFile; var aFileOfRecords: file of Directory; aTextFile: TextFile; aFileString: String; aDirectory: Directory; begin AssignFile(aFileOfRecords, 'd:\test\out.dat'); Reset(aFileOfRecords); AssignFile(aTextFile, 'd:\test\out.txt'); Rewrite(aTextFile); while not Eof(aFileOfRecords) do begin Read(aFileOfRecords, aDirectory); Writeln(aTextFile, PadRight(aDirectory.Name, 25, ' '), PadRight(aDirectory.Address.Street, 15, ' '), PadLeft(ToStr(aDirectory.Address.Home), 4, ' '), PadLeft(ToStr(aDirectory.Address.Rented), 4, ' '), PadLeft(ToStr(aDirectory.Nomber), 4, ' ')); end; CloseFile(aTextFile); CloseFile(aFileOfRecords); end; end. |