こんにちは。
対戦成績表をTstringListを使ってTStringGridに表示させようとしています。
for m:=0 to BossID.Count-1 do begin//カウント0→35
sl.add(bossid[m]);
//Listbox1.Items.add(bossid[m]);//チェック用 ok
iUma:=StrToInt(Copy(bossID[m],1,2));//馬番ID
iKako:=StrToInt(Copy(bossID[m],3,1));//過去走ID
//if(m>0)then
if(Copy(BossID[m],1,2)=Copy(sl[m],1,2))then begin//馬番が一致
order:=strtoint(Copy(bossid[m],9,2));//順位
Tosu:=strtoint(Copy(bossid[m],11,2));//頭数
Inc(Tosu);
end;
end;
このコードだとエラーEConvertErrorがでてしまいます。どこに問題があるのでしょうか。
------------
//Copy(Bossid[m],1,2)+//馬番
// IntToStr(ikako)+//+過去走 3,1
// Racejyoken+//レース条件+グレード 4,4
// Format('%2d',[order])+//9,2
// Format('%2d',[tosu]);//頭数11,2
------------
010弥生賞 1 4
021弥生賞 2 4
030弥生賞 3 4
061弥生賞 6 4
011スプS 1 2
020スプS 2 2
------------
01馬番が重なっているので
トータル順位1+1=2
トータル対戦頭数4+2=6
というように馬番ごとのトータル順位とトータル対戦頭数をTstringGridに表示させるたいのです。
010弥生賞 1 4
123456789ABCD
4+4=9だから
こんにちは
TStringlistにaddしたデータの重複文字を判定する方法を教えてください。
var
i : integer;
begin
i := ListBox1.Items.IndexOf('あいうえお');
if i = -1 then
showmessage('重複ありませんでした')
else
showmessage(IntToStr(i) + '行目に登録されています');
end;
indexofで、重複行を検索できます。
重複文字を探すなら、
AnsiPosでしょうか?
AnsiPosは、0で見つからず、0以上でその位置を教えてくれます。
//簡単なサンプルですが、
//部分文字列を判定するなら、以下のようになります。
var
i,i1:integer;
begin
i1 := 0;
while listbox1.Items.Count > i1 do begin
i := ansipos('あいう',listbox1.items[i1]);
if i = 0 then
showmessage(IntToStr(i1) + '行目には'
+ char(13) +'見つかりませんでした')
else begin
showmessage(IntToStr(i1) + '行目の'
+ chr(13) + IntToStr(i) + '列目にあります');
//exit;
end;
inc(i1);
end;
こんばんは
ansiposを使った文字判定の方法は確認できました。
質問なんですけど、
istbox1のデータが以下だとして
------------
010弥生賞0104
021弥生賞0204
030弥生賞0304
061弥生賞0604
011スプS0102
020スプS0202
------------
//馬番(2)過去走(1)レース条件(6)順位(2)頭数(2)
最初の馬番(2)のみを文字列から重複していた場合、列ではなく順位(2)を抜き出したい場合はどのようにすればいいのでしょうか。
Tstringlist.indexofを使ってみても部分文字列はヒットしないみたいなので部分的にヒットしたら値を返す方法を教えてください。
---------------------------------
bUma:=Copy(bossid[k],1,2);//馬番
i:=ansipos(inttostr(k0),Copy(bossid[k0],3,1));//前走
index:=bossid.IndexOf(buma);
if(index<>-1)then begin//馬番一致
if(i<>0)then begin//前走一致
a0:=strtoint(copy(bossid[k],10,2));//順位
b0:=strtoint(copy(bossid[k],12,2));//対戦順位
end;
end;
//以下でどうでしょうか?
//純粋に馬番だけを検索し、ヒットした列の順位だけを、
//listbox2に納めるようにしました。
var
i,i1:integer;
s,s1:string;
begin
i1 := 0;
while listbox1.Items.Count > i1 do begin
s1 := listbox1.items[i1];
i := ansipos(edit1.Text,s1[1]+ s1[2]);
if i = 0 then begin
{showmessage(IntToStr(i1) + '行目には'
+ char(13) +'見つかりませんでした')}
end else begin
s := listbox1.Items[i1];
listbox2.Items.Add(s[10] + s[11]);
end;
inc(i1);
end;
//試しにやってみました。
//こんな感じに、Listの文字列を分解して、
//Stringgridに表示させるのでしょうか?
//edit1,listbox1,striggrid1を使ってます。
var
i,i1,i2:integer;
s,s1:string;
begin
i1 := 0;
i2 := 0;
while stringgrid1.RowCount > i1 do begin
stringgrid1.Cols[i1].Clear;
inc(i1);
end;
i1 := 0;
while listbox1.Items.Count > i1 do begin
s1 := listbox1.items[i1];
i := ansipos(edit1.Text,s1[1]+ s1[2]);
if i = 0 then begin
{showmessage(IntToStr(i1) + '行目には'
+ char(13) +'見つかりませんでした')}
end else begin
inc(i2);
s := listbox1.Items[i1];
stringgrid1.Cells[1,i2] := s[1] + s[2];
stringgrid1.Cells[2,i2] := s[3];
stringgrid1.Cells[3,i2] :=
s[4] + s[5] +s[6] + s[7] +s[8] + s[9];
stringgrid1.Cells[4,i2] := s[10] + s[11];
stringgrid1.Cells[5,i2] := s[12] + s[13];
end;
inc(i1);
end;
こんばんは、うまくいかないのでもう少し質問させてください。
------------
010弥生賞0104
021弥生賞0204
030弥生賞0304
061弥生賞0604
011スプS0102
020スプS0202
------------
上のようなstringlistがあるとして、
for i:=0 to bossid.count-1 doでループしながら
一つずつ消して文字列比較していく方法はありますか?
どのようにして、どんな不具合があるのかを書いてください。
こんにちは。
RAD命さん参考コードありがとうございます。
「Tstringlistを使って文字列をTstringgridに表示する」という投稿については解決しました。
不具合などはなく部分文字列を表示させることはできました。
//一応書いてみました
//こういう事ですか??
procedure TForm1.Button1Click(Sender: TObject);
var
i,i1,i2,i3:integer;
s,s1:string;
setdel: array [0..255] of string;
begin
i1 := 0;
i2 := 0;
for i1:=0 to stringgrid1.RowCount -1 do begin
//StringGridを初期化する
stringgrid1.Cols[i1].Clear;
end;
i1 := 0;
for i1 :=0 to listbox1.Items.Count -1 do begin
//検索対象文字列の取得
s1 := listbox1.items[i1];
//検索
i := ansipos(edit1.Text,s1[1]+ s1[2]);
if i = 0 then begin
//もし見つからなければ
//削除リストに追加
setdel[i1] := listbox1.Items[i1];
end else begin
//もし見つかったならば
//削除リストには何も入れない
setdel[i1] := '';
//StirngGridの列を指定する数値を加算
inc(i2);
//見つかったリストの値を取得
s := listbox1.Items[i1];
//Grid毎に値を分解して納める
stringgrid1.Cells[1,i2] := s[1] + s[2];
stringgrid1.Cells[2,i2] := s[3];
stringgrid1.Cells[3,i2] :=
s[4] + s[5] +s[6] + s[7] +s[8] + s[9];
stringgrid1.Cells[4,i2] := s[10] + s[11];
stringgrid1.Cells[5,i2] := s[12] + s[13];
end;
end;
//一気に削除
i3 := 0;
for i1 := 0 to listbox1.Items.Count -1 do begin
i3 := listbox1.Items.IndexOf(setdel[i1]);
if i3 <> -1 then begin
listbox1.Items.Delete(i3);
end;
end;
end;
ツイート | ![]() |