254
255
256
257
258
260 character(len = *), intent(in):: fullname
261 character(len = *), intent(out), optional:: file, var, attr, iorange
262 character(len = STRING):: varpart
263 integer:: atmark, colon, comma
264 character(len = *), parameter:: VARNAME_SET &
265 = "0123456789eEdD+-=^,.:_" &
266 // "ABCDEFGHIJKLMNOPQRSTUVWXYZ" &
267 // "abcdefghijklmnopqrstuvwxyz"
268 continue
269
270
271
272
273 atmark = index(fullname, gt_question)
274 if (atmark == 0) then
275 atmark = index(fullname, gt_atmark, back=.true.)
276 if (atmark /= 0) then
277 if (verify(trim(fullname(atmark+1: )), varname_set) /= 0) then
278 atmark = 0
279 endif
280 endif
281 endif
282 if (atmark == 0) then
283
284 if (present(file)) file = fullname
285 if (present(var)) var = ''
286 if (present(attr)) attr = ''
287 if (present(iorange)) iorange = ''
288 return
289 endif
290 varpart = fullname(atmark+1: )
291
292 if (present(file)) file = fullname(1: atmark - 1)
293
294 comma = index(varpart, gt_comma)
295 if (comma /= 0) then
296
297 if (present(var)) var = varpart(1: comma - 1)
298 if (present(attr)) attr = ''
299 if (present(iorange)) iorange = varpart(comma + 1: )
300 return
301 endif
302 if (present(iorange)) iorange = ''
303
304 colon = index(varpart, gt_colon)
305 if (colon == 0) then
306 if (present(var)) var = varpart
307 if (present(attr)) attr = ''
308 varpart = ''
309 return
310 endif
311 if (present(var)) var = varpart(1: colon - 1)
312 if (present(attr)) attr = varpart(colon + 1: )
313 varpart = ''
integer, parameter, public string
文字列を保持する 文字型変数の種別型パラメタ