|
> No.4150[元記事へ]
k.t.さんへのお返事です。
> テキストファイルからINPUT文でデータを読み込んでのやり方ではやはり難しいでしょうか。
> 15,210,33,64,55,21
> 120,146,25,37,88,91
>
> のように,テキストファイルに大量に並べられた数値を
>
> 15,210,33
> 64,55,21
> 120,146,25
> 37,88,91
>
> のように並べ替え,表示することはできないでしょうか.
単純にINPUT #1 文では読み出せないのですね。勘違いしていました。
INPUT #1 ではエラーが出るようなので、LINE INPUT #1 で一行分読み出してから
SUB TOKUN() で配列変数に入れ指定分 N個ずつ表示させています。
sample.txt (※わざとデタラメにしています)
------------------------------------
+1, X2 ,3 ,4,++5 -, 6/
7, '8, 9,10 ,1C1 ,12', 13 ,
14,-15,16, *17,18
, ,19,--20, L2 1 A ,22,, +2 3 ,
-,24 ,25, , 26,,,,,=27M,28\, 29,,.,
, 30-
------------------------------------
DIM X$(100)
LET N=3 !'N個ずつ表示させる
OPEN #1:NAME "sample.txt"
DO
LINE INPUT #1,IF MISSING THEN EXIT DO:A$
MAT X$=NUL$
CALL TOKUN(A$,X$,K)
LET I=1
DO UNTIL I>K
LET X$(I)=FILTER$(X$(I))
IF X$(I)<>"" THEN
LET COUNT=COUNT+1
IF MOD(COUNT,N)=0 THEN
PRINT X$(I)
ELSE
PRINT X$(I);",";
END IF
END IF
LET I=I+1
LOOP
LOOP
CLOSE #1
END
EXTERNAL FUNCTION FILTER$(X$) !'フィルター処理
DO
LET FL=0
FOR I=1 TO LEN(X$)
IF POS("0123456789-.",X$(I:I))=0 OR (I<>1 AND X$(I:I)="-") THEN
LET X$(I:I)=""
LET FL=1
EXIT FOR
END IF
NEXT I
LOOP UNTIL FL=0
IF X$="." THEN LET X$=""
IF X$="-" THEN LET X$=""
IF X$="+" THEN LET X$=""
LET FILTER$=X$
END FUNCTION
EXTERNAL SUB TOKUN(A$,X$(),K) !'トークン取り出し
LET B$=A$
LET K=0
DO
LET N=POS(B$,",") !'区切り文字 ","
IF N>0 THEN
LET K=K+1
LET X$(K)=FRONTSTRING$(B$,",")
LET B$=BEHINDSTRING$(B$,",")
END IF
LOOP UNTIL N=0
LET K=K+1
IF RIGHT$(B$,1)="," THEN
LET X$(K)=LEFT$(B$,LEN(B$)-1)
ELSE
LET X$(K)=B$
END IF
END SUB
EXTERNAL FUNCTION FRONTSTRING$(A$,B$) !'前方取り出し
LET N=POS(A$,B$,1)
IF N=0 THEN
LET FRONTSTRING$=A$
ELSE
LET FRONTSTRING$=A$(1:N-1)
END IF
END FUNCTION
EXTERNAL FUNCTION BEHINDSTRING$(A$,B$) !'後方取り出し
LET N=POS(A$,B$,1)
IF N=0 THEN
LET BEHINDSTRING$=A$
ELSE
LET BEHINDSTRING$=A$(N+LEN(B$):LEN(A$))
END IF
END FUNCTION
|
|