• 締切済み

perl:文字列を数値として変換 警告でないように

ある変数に 文字列として 数値が格納されている。 ノイズがあり、時には その変数に 英字数字のごちゃ混ぜ文字列が入るときがある。 文字列には数字だけが入っている前提で処理すると、時に その場合、Argument "○○"isn't numeric in addition・・・エラーがでてしまう。 このエラーを出力したくない、エラーログファイルに 読込エラーだったレコード内容を吐き出すようにしたい。 文字列が数字のみで構成されている場合は ○○を実行し、数字以外で構成されている場合は XXを実行するという if文を作成したいと考えている。よい判定方法を教えてください。 現在は、 $i=$i+0; if( $i =~ /^\d+$/ ){ ○○} else{ XX}としているが、 $i=$i+0; の行でエラーが出てしまうときがある。

  • Perl
  • 回答数6
  • ありがとう数5

みんなの回答

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.6

「(先頭に空白があるかもしれない) 数字」なら /^\s*\d+$/ でチェックできる. ただ, #4 とそれへの「お礼」を読み返すと, なんかおかしい. 「数字以外だったら、$i=$i+0;をしないようにするように考えております。」のあとに「その数字チェックのやり方を知りたいと思っております。」がくるって, おかしいと思わない? どのように「数字チェックをした」としても, それと「数字以外だったら、$i=$i+0;をしないようにする」は直接つながらないでしょ? そして, 少なくともこの質問文からは「数字以外だったら、$i=$i+0;をしないようにする」という意図が見られない.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.5

あなたのいう「数字」とやらがどのような形式のものであるかがわかれば「チェックの方法」を書けるかもしれません.

1204533
質問者

お礼

秒数が入っているので、本来は 0 もしくは 正の整数が入っている項目です。 ただし、空だったり、abcなどの数字以外が入ってくる場合があり、エラーメッセージなく 処理したいと思っております。 エラーがはきだされるレベルであれば、現状処理はできているのですが、エラーメッセージをなくし、エラーの場合はその行自体を 別のログファイルに吐き出ししたいと考えております。 この情報で、解決できますでしょうか?

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.4

根本的な間違いがあるようですね。 どんな方法を使おうが、判定をした結果を生かしてないようです。 判定して数値以外が含まれていたら演算をしてはダメですよ。演算した途端にエラーになります。 計算できないのであたりまえですよね? 判定して数値以外があったら、 $i=$i+0; は実行しないようにしていますよね?

1204533
質問者

お礼

ご指摘の通り、数字以外だったら、$i=$i+0;をしないようにするように考えております。 その数字チェックのやり方を知りたいと思っております。 数字チェックの際に、Argument ~ メッセージがでてしまわない方法が知りたいのです。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

そもそも $i=$i+0; であなたは何をしたいんですか? それは, 「文字列が数字のみで構成されている場合は ○○を実行し、数字以外で構成されている場合は XXを実行する」こととどのような関係があるんですか?

1204533
質問者

お礼

$iに入っているのは、数字のみと思っていたのですが、$iを文字列認識しないようにするために、$i=$i+0;を設定しておりました。 実際は、その際はelse{ XX}は設定しておりませんでした。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

なんで「数字のみで構成されている」かどうかを判定する前に加算してるの?

1204533
質問者

お礼

数字チェックを先に実施しても見たのですが、警告メッセージがでてしまうので、何かよい方法がありましたら、教えてください。

  • Gletscher
  • ベストアンサー率23% (1525/6504)
回答No.1

入力値が数値だけかどうかは、 if(($input !~ /[\d]/) || (length($input) ne $limit)){ $outvalue = 'false'; } で判定できますが、いかがでしょうか? ここで、 $input は入力 $limit は桁数 $outvalue は出力値 です。

1204533
質問者

お礼

先に このチェックをしても 警告メッセージは消えません。 警告メッセージを出ないようにすることはできないでしょうか?

関連するQ&A

  • 文字列かどうかの判定

    例えばA1セルに入力せれているものが、数字(もしくは文字)であった場合プログラムを実行させようと考えています。 入力されている数字や文字列は一定では有りません。 If 数字(文字)であった場合 Then Call *** end If の様な感じです。 過去ログの文字列検索を探しましたが、使った事の無いコードばかりでアレンジのやり方が全く分かりません。 数字の場合と文字列の場合の2通りの方法をご教示頂きたくよろしくお願い致します。

  • 文字列か数値か判定する条件式

    こんにちは。 A1が文字列なら0。A1が数値ならA1そのもの。 というIF文を作りたいのですが、  =if(A1=文字列,0,A1)  ←こんな感じ 条件式はどう書けばいいのでしょうか?  A1=string ←ではだめでした。  not A1=numeric ←でもだめでした。 ご教示ください。

  • 変数を文字列として扱う方法

    VB初心者なのですが、 変数を、その変数のまま文字列で扱う方法がないかと悩んでいます。具体的に言うと、 たとえば、 Dim Bef(i,j) As String と宣言しておいて、 Bef(1,1)に、SCATTERBRAiN11 Bef(1,2)に、SCATTERBRAiN12 Bef(1,3)に、SCATTERBRAiN13 …… Bef(i,j)に、SCATTERBRAiNij という「文字列」を入れたいのです。 (最後の2文字i,jが、そのときの変数i,jの値。) これをFor構文を使って、 Bef(i,j)="SCATTERBRAiN" + i + j と書いたら、エラーになってしまいました。 iやjを、その変数に入っている数字の文字列として扱うには、どうすればいいのでしょうか。 よろしくお願いします。

  • 数値と文字列の見分け方

    入力された文字列が数字の場合は「数字」、 文字の場合は「文字」として表示させたいのですが これを見分ける処理がうまくいきません。 どのようにしたら数字と文字を区別できますか? いい処理方法があればどなたか教えてください!

  • VBA 文字列と数値の混在

    Excel VBA 独学中の初心者です。独学中の初心者です。 データ型に関する以下の疑問についてお答えいただける方、よろしくお願い致します。 疑問1.「文字列 & 数値」でエラーにならず、結果は文字列になるようですが、これはVBAの規則上当たり前のことでしょうか。 疑問2.InputBox関数の戻り値は、Typeを省略した場合文字列と思いますが、これを数値型の変数に代入してもエラーは発生しませんでした。これも当たり前のことでしょうか。 具体例は以下です。 ------------------ Option Explicit Sub 文字列と数値の疑問() '初期設定 Cells.Clear Range("A1").Select '本題はここから Dim i As Long Dim j As Long Dim strRange As String Dim strInput As String '------------------ '疑問1の例 i = 2 strRange = "A" & i '疑問1:文字列と数値変数(長整数型)を文字列連結演算子で連結してもエラーにならない。・・・なぜ? '結果は1つの文字列→strRange ="A2" '例 Range(strRange).Select '動作OK Range(strRange) = i '動作OK '------------------ '疑問2の例 strInput = InputBox("選択行を入力してください", , "4") 'strInputは文字列型変数 j = strInput '疑問2:数値変数(長整数型変数)に文字型変数を代入してもエラーにならない・・・なぜ? '結果は長整数型変数(数値) j=4 (Input BOX をデフォルトでOKしたとき) '例:以下の両方とも動作OK '1) strRange = "A" & strInput '文字列 & 文字列 →文字列 strRange ="A4";疑問なし Range(strRange).Select '動作OK Range(strRange) = strInput '2) Cells.Clear '確認用にクリアスクリーン Range("A1").Select '確認用にセル位置移動 strRange = "A" & j '文字列 & 数値 →文字列 strRange ="A4";疑問1と同じ Range(strRange).Select '動作OK Range(strRange) = j '動作OK End Sub

  • UNIXで数字の文字列を、数値に変換するには?

    UNIXで、数字のみの文字列を、その文字列で表される数値に変換して変数に代入したいのですが、どうすればいいでしょうか? つまり、 VALUE=`echo 22j4444j33 | awk -F'j' '{print $1}'` <VALUEに入った"22"を22の数値に変換> exit $VALUE というようなことがしたいです。 よろしくお願いします。

  • VC++で文字列を数値に変換する方法

    VC++にて、button1をクリックしたら、textBox1に入力された数字の文字列(10進数)を数値に変換して、x等の変数に16進数で格納したく。 下の { } の部分にどのように書けばいいのでしょうか?  初心者につき、できるだけ噛み砕いて、説明を加えて、回答お願いします。 また、textBox1に数字以外が入力されたら、エラー検出が可能であれば、その方法も教えて下さい。 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { }

  • セル内の数字も混じった文字列から特定パターンの数字列を取り出す

    またまたお世話になります。  (1)セル内に1つまたは2つのハイフンでつながる数字列を含む文字列(ブランクも含みます)がある場合にそこからその数字列のみを取り出す方法をアドバイス願います。  例 cを文字、xを数字(最大7桁)とします。 セル内の文字列 cccccc cccc cccc xxxxxxx-xx-x ccccccc cccc cccc からxxxxxxx-xx-x を取り出して文字列として別のセルに置く方法です。 (2) もしこのxxxxxxx-xx-x が[ と ] で囲まれていた場合はもう少し容易になりますか?  よろしくお願いします。  

  • 文字列のカラムを数字と比較したい

    sqlserver2005 文字列のカラム(ただし数字のみ)と、画面から文字列としてきた 数字の大小を比較したいと思っています。 たとえば、WHERE ~ 【対象カラム】 > CONVERT(NUMERIC,'1')のように しようと思っていたのですが、この場合、【対象カラム】の中に 空白があるとこけてしまいます。 文字列なので、空がNULLとは限らないため困っています。 そもそもINT型のカラムならば良いのですが、都合により文字列の カラムにするしかなく。 妙案ありましたらアドバイスいただけないでしょうか。

  • PHPで文字列から数値に変換する方法について

    PHP5で数値の文字列から数値にする方法で質問です。 数値と認識されるものについては、そのまま、およびキャストするだけでそのまま使えると思いますが、 割り算(「/(スラッシュ)」)が入っているような計算式を数値として認識させる方法はありますでしょうか? 例えば $a="6861/2500"; echo (float)$a; echo "<br>"; とすると、先頭の6861という数値に変換されます。 if(is_numeric($a)){ echo "数値"; }else{ echo "文字"; } の結果は文字という判定になりました。 6861/2500 ↓ 2.7444 と取得したいです。 自分で計算記号から数値部分を区切って計算するような方法をとらないと難しいでしょうか?

    • ベストアンサー
    • PHP

専門家に質問してみよう