FORとREADを組み合わせてる。
READで取得した文字列をIFで判定するんだよーん。
FOR Y=0 TO 高さ
READ MAP$
FOR X=0 TO 横
IF MAP$[X]=="?" THEN
BL=1
ELSE
BL=0
ENDIF
BGPUT 0,X,Y,BL
NEXT
NEXT
でDATAのなかに?があればBG番号1を配置する。あと知ってると思いますが配列宣言はしなくていいです。文字列の長さを指定しているだけです。
RESTORE @MAPDATA:Y=0
REPEAT
READ D$: IF D$=="@END" THEN BREAK
FOR X=0 TO LEN(D$)-1
C=INSTR("□HG■",MID$(D$,X,1)
IF C!=-1 THEN BGPUT 0,X,Y,BGC[C]
NEXT:Y=Y+1
UNTIL FALSE
@MAPDATA
DATA "■■■■■■■■■■■"
DATA "■□□□□■□□□G■"
DATA "■□■■□□□■■□■"
DATA "■H□□□■□□□□■"
DATA "■■■■■■■■■■■"
DATA "@END"