掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字と数字を分解するには (ID:1551)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
このデータ構造なら一文字ずつスキャンするのは仕方がないですが、 Takuさんのコードで、 > SS := copy(S, i,1); とcopyで一文字ずつ切り分けてますが、SS := S[i] とインデックスで アクセスした方が高速です。 > if SS='A' then Item=1 〜 SS='Z' then Item=26 if で何回もチェックするのも効率が悪いです。 SS をChar型にすれば、case文が使えて高速。 >var Adress:array[0..26] of String; Adress:array['A'..'Z'] of String; とインデックスをChar型にして、文字で直接アクセスできるように すると効率がよさそう。 とういようなことを考慮して、 var Adress:array['A'..'Z'] of String; procedure ArrayFromString(S: String); var SS, Item: Char; i, j:integer; begin Item := S[1]; { case Item of 'a'..'z': Item := Chr(Ord(Item)-32); end;} j := 2; SS := S[j]; for i := 2 to Length(S) do begin SS := S[i]; case SS of 'A'..'Z': begin Adress[Item] := Copy(S, j, i-j); Item := SS; j := i+1; end; { 'a'..'z': begin Values[Item] := StrToFloat(Copy(S, j, i-j)); Item := Chr(Ord(SS)-32); j := i+1;} end; end; end; Adress[Item] := Copy(S, j, Length(S) - j); end; ※コメントの{}を外すと小文字にも対応。 呼び出すときは、 A := strtofloa(Adress['A']); とします。 サンプルを作って、 にしのさんの方法と比較してみましたが、9倍ほど高速でした。 データ構造を、工夫すればもっと目に見えて速くすることは できるんですが。。。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.