0000368934874300000
上記のような
左右を0で囲まれたexcelデータの
数字列の左側にある0の数をカウントしようと
下記のようにプログラムを作ったのですが上手くいきません。
初心者なので初歩的な内容かもしれませんが
出来ましたらアドバイスください。
宜しくお願いします
カウントしたい0の個数をnx1とし
nx1:=0;
for i:=1 to nx do begin
if ExcelSheet.Cells[1,i].value <= 0 then
nx1:=nx1+1;
if ExcelSheet.Cells[1,i].value > 0 then;
end;
>0000368934874300000
これは一つセルの値のことですか?
でしたら,それは間違いなくうまくいかないでしょう.
Cell[1,i].Value はセルの値を取得するものです.
iの値を変化させているということは,違うセルの値を取得していることになって
しまいます.
以下は左側の'0'の数を数える関数の例です.
勘違いしないように言っておきますが,Sにセルの値を渡します.
function TForm1.ZeroCount(S: String): Integer;
var
I, L: Integer;
begin
L := Length(S);
I := 1;
while (I <= L) and (S[I] <= '0') do Inc(I);
Result := I-1;
end;
がんばってください.
スミマセン.間違いです.
Iの初期値を0にしてください.
説明不足で申し訳ありません
これは1つのセルに1つの数字が入っているのです。
0,0,0,0,3,6,8,9,3,4,8,7,4,3,0,0,0,0,0
このような状態で左側の0の個数をカウントしたいのです。
上記の場合は4になります。
左から順番にセルの値を読み取って
値が0以下ならnx1の値に1を加えるといったように考えていたのですが。
そのFor文に0以外があった場合にループ抜け出す手続きするだけじゃ?
Break や Exit 手続き参照
何故に
0000368934874300000 が
0,0,0,0,3,6,8,9,3,4,8,7,4,3,0,0,0,0,0
となってしまっているのかよくわかりませんが...
仕様変更ですか?
仕様変更は別料金となります(笑).
>そのFor文に0以外があった場合にループ抜け出す手続きするだけじゃ?
そういうことですね.なりゆきなのでコードを
0,0,0,0,3,6,8,9,3,4,8,7,4,3,0,0,0,0,0
0000368934874300000';
どちらでも動作すると思います.
function TForm1.ZeroCount(S: String): Integer;
var
I, L: Integer;
begin
L := Length(Trim(S));
Result := 0;
for i:=1 to L do begin
if (S[I] <> '0') then break;
if (S[I] = '0') then inc(Result);
end;
end;
お二方ともアドバイスありがとうございました。
おかげで何とか解決しました。
>おかげで何とか解決しました。
どうやったのでしょう(笑).
先のコードの修正です.今見返したら... あれっ!! です.
function TForm1.ZeroCount(S: String): Integer;
var
I, L: Integer;
begin
L := Length(Trim(S));
Result := 0;
for i:=1 to L do begin
if (S[I] <> '0') and (S[I]<>',') then break;
if (S[I] = '0') then inc(Result);
end;
end;
用途によっては,以下でもいいかも知れません.
if (S[I] > '0') then break;
ツイート | ![]() |