固定長データ
Posted feedbacks - PostScript
PostScript で。データ用に名前付きファイルを使用しているので Level2 以降限定です。 レコード単位で読み出し、部分文字列に切り出して配列に格納しています。 切り出した部分文字列はコピーではなく参照なので、文字列データに関しては値を書き 換えるとレコード文字列に反映されます。 % 数値データに関しては反映されません。手抜き。 [[(01breakfast lunch dinner ) 1 (breakfast ) (dinner ) (lunch )] ... [(31 ...] ] [(LASTNAME Firstname U 99200803) (LASTNAME ) (Firstname ) (U) 99 2008 3] テストコードはデータを読み込み、10日の朝食のデータを書き換えて書き出しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | %!PS
/MenuLength 500 def
% /MenuLength 20 def
/ReadHeader {
% -file- ReadHeader
% [(RecordString) (FamilyName) (Name) (Sex) Age Year Month] -file-
[
1 index
12 12 add 1 add 3 add 4 add 2 add string readstring pop
dup
dup 0 12 getinterval exch
dup 12 12 getinterval exch
dup 24 1 getinterval exch
dup 25 3 getinterval cvi exch
dup 28 4 getinterval cvi exch
32 2 getinterval cvi
]
exch
} bind def
/ReadRecord {
% -file- nRecords ReadRecord [[Records]] -file-
% [record] : [(RecordString) day (breakfast) (lanch) (dinner)]
[ exch 2 index exch
% -file [ -file- nRecords
{
% [ -file-
[ 1 index
% [ -file- [ -file-
2 MenuLength 3 mul add string
readstring pop
% [ -file- [ (record)
dup
dup 0 2 getinterval cvi exch
dup 2 MenuLength getinterval exch
dup 2 MenuLength add MenuLength getinterval exch
2 MenuLength dup add add MenuLength getinterval
] exch
} repeat
pop
]
exch
} bind def
-------- Test Code ----------
(6093.txt) (r) file
ReadHeader
31 ReadRecord
closefile
% Rewrite day 10 breakfast
dup 9 get 2 get % Pickup Data
0 (hogehoge fugafuga) putinterval
(===) = ppstack (===) =
% Write Data
% [Header] [[Records]]
(6093a.txt) (w) file
% [Header] [[Records]] -file-
dup 4 -1 roll 0 get writestring
% [[Records]] -file-
exch {
0 get 1 index exch
writestring
} forall
closefile
|


Mymelo #6060() Rating5/7=0.71
固定長のデータが記載されたファイルを読み込むプログラムを作成してください。読み込んだデータは、複数の値を格納できるデータ型に格納してください。
ファイルには、すべて ascii 文字で以下のデータが格納されています。デリミタはなく、固定長で格納されています。レコードとレコードのあいだも改行はありません。
以上の形式のデータ500人分を読みこんで、データを複数の値を格納できるデータ型に格納してください。データに大して何か処理を行う必要はなく、すぐに破棄してかまいません。
この問題は、このようなファイルをどのように扱うかを知りたくて作成しました。
[ reply ]