ページ 11

コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 21:15
by commandbeginner
C言語でファイルを読み込み、1行ごとの数字だけを読み込み総和を求めるというプログラムは
作れたのですが、コマンドプロンプトでこれをやろうとしたら上手くいきません。

number.txtが

t_q23ta
x?y34ab
x+xXX45wer


という3行のテキストで
数字になってる23,34,45を足して表示するというプログラムです。
1行ごとに、数字が1つだけ隠れていて、これを抽出して総和を求めたいです。
何故数字以外の文字列を入れたかというと、文字列から数字を抽出するという
応用的な事がしたいからです。Cでは配列を用意して数字が出てきたら、文字列の
長さと順番にでてきた数字からint型の変数に変換するというやり方で行いました。
コマンドプロンプトやシェルではどうやってこのコマンドプログラムを汲めばいいのでしょうか?

コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 21:16
by commandbeginner
ユーザー名と件名が逆になりました、すいません。

Re: commandbeginner

Posted: 2014年1月01日(水) 21:30
by みけCAT
ファイルを開く代わりにそのファイルポインタにstdinを代入するだけではないのですか?

書いたプログラムのソースコードを提示することはできますか?
コマンドプロンプトで行った操作も教えていただけるとわかりやすいです。
コードを提示するときは、BBcodeを有効にした状態でcodeタグで囲み、
かつきちんとインデントをしていただけると、見やすくて助かります。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 21:45
by softya(ソフト屋)
直しておきましたが、丸投げは禁止させて頂いております。
みけCATさんの言われる通り、今出来ているソースコードをお願いします。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 22:05
by みけCAT
もしかして、外部のプログラムに頼らず、コマンドプロンプトの内部コマンドだけでこの処理を行いたいということでしょうか?

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 22:36
by commandbeginner
>みけCATさん
はい、コマンドプロンプトのコマンドだけで実現したいです。
Cでは作りましたから。
無理でしょうか?

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 22:40
by box
そもそも
commandbeginner さんが書きました:コマンドプロンプトでこれをやろうとしたら上手くいきません。
どんなコマンドを入力して、どのようにうまくいかなかったのでしょうか。
具体的に示してください。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 22:50
by みけCAT
commandbeginner さんが書きました:>みけCATさん
はい、コマンドプロンプトのコマンドだけで実現したいです。
Cでは作りましたから。
無理でしょうか?
外部コマンドが一部含まれるかもしれませんが、
「バッチファイルを使用し、コマンドプロンプトでhelpコマンドを実行したときに表示されるコマンドだけでこの処理を行う」
ことを目標にしていいですか?

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 22:51
by commandbeginner
>boxさん
すいません、使えそうなコマンドがなくて
全く組めてません、良いコマンドがあれば教えて頂きたいです。
コマンドの流れ的には、行が終わるまで変数sum(初期値0)に数値を加算
というような感じですね。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 22:53
by commandbeginner
そうですね、helpで表示されるコマンドだけで何とかしたいです。
コンピュータに何か変更をするのは避けたいので。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 23:05
by box
commandbeginner さんが書きました:C言語でファイルを読み込み、1行ごとの数字だけを読み込み総和を求めるというプログラムは
作れた
まあ、手元にあるはずのソースコードの提示がない限りは、
話は先に進みそうもないですね。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 23:13
by softya(ソフト屋)
Linuxのシェルならexprなどがあるので計算できますが、それではなくて?

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 23:27
by softya(ソフト屋)
あとWindowsならvbscriptやら、jscript、それと7以降標準のWindows PowerShellってもあります。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 23:40
by みけCAT
とりあえず、!=~以外の半角文字の中に入っている数値を抽出して足すことができました。
どうしたらこの3文字に対応できるか、もう少し効率のいい方法は無いかを調査しています。

コード:

@echo off
setlocal ENABLEDELAYEDEXPANSION

set sum=0

for /F "delims=" %%i in (number.txt) do (
	set num=%%i
	set num=!num: =!
rem	set num=!num:!=!
	set num=!num:"=!
	set num=!num:#=!
	set num=!num:$=!
	set num=!num:%%=!
	set num=!num:^&=!
	set num=!num:'=!
	set num=!num:(=!
	set num=!num:^)=!
	set num=!num:**=!
	set num=!num:+=!
	set num=!num:,=!
	set num=!num:-=!
	set num=!num:.=!
	set num=!num:/=!
	set num=!num::=!
	set num=!num:;=!
	set num=!num:^<=!
rem	set num=!num:==!
	set num=!num:^>=!
	set num=!num:?=!
	set num=!num:@=!
	set num=!num:A=!
	set num=!num:B=!
	set num=!num:C=!
	set num=!num:D=!
	set num=!num:E=!
	set num=!num:F=!
	set num=!num:G=!
	set num=!num:H=!
	set num=!num:I=!
	set num=!num:J=!
	set num=!num:K=!
	set num=!num:L=!
	set num=!num:M=!
	set num=!num:N=!
	set num=!num:O=!
	set num=!num:P=!
	set num=!num:Q=!
	set num=!num:R=!
	set num=!num:S=!
	set num=!num:T=!
	set num=!num:U=!
	set num=!num:V=!
	set num=!num:W=!
	set num=!num:X=!
	set num=!num:Y=!
	set num=!num:Z=!
	set num=!num:[=!
	set num=!num:\=!
	set num=!num:]=!
	set num=!num:^^=!
	set num=!num:_=!
	set num=!num:`=!
	set num=!num:a=!
	set num=!num:b=!
	set num=!num:c=!
	set num=!num:d=!
	set num=!num:e=!
	set num=!num:f=!
	set num=!num:g=!
	set num=!num:h=!
	set num=!num:i=!
	set num=!num:j=!
	set num=!num:k=!
	set num=!num:l=!
	set num=!num:m=!
	set num=!num:n=!
	set num=!num:o=!
	set num=!num:p=!
	set num=!num:q=!
	set num=!num:r=!
	set num=!num:s=!
	set num=!num:t=!
	set num=!num:u=!
	set num=!num:v=!
	set num=!num:w=!
	set num=!num:x=!
	set num=!num:y=!
	set num=!num:z=!
	set num=!num:{=!
	set num=!num:^|=!
	set num=!num:}=!
rem	set num=!num:~=!
	set /A sum=sum+num
)

echo !sum!
オフトピック
フォーラムルール違反ならごめんなさい。
とりあえずコマンドプロンプト単体でも不可能ではないかもしれないことを示す目的で投稿しました。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 23:53
by commandbeginner
みけCAT さんありがとうございます!!
ちょっと試してみます。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月01日(水) 23:56
by softya(ソフト屋)
みけCAT さん、ご苦労さまです。
出来るような気はしてましたが、これは作るのが面倒ですね。非効率過ぎて泣けてきました。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月02日(木) 00:09
by commandbeginner
コマンドは意外と大変なことを知りました。コマンドプロンプトは複合的な処理や細かい処理は苦手なのかなと
思いました。ありがとうございました。

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月02日(木) 00:11
by みけCAT
みけCAT さんが書きました:!=~以外の半角文字の中に入っている数値を抽出して足すことができました。
試してみたところ、forコマンドでファイルを読み込む段階でいくつかの文字が消えているようで、
その中に上記の3文字も含まれているため、ファイルに上記の3文字が含まれていても動作するようです。
(Windows Vistaで確認)

Re: コマンドプロンプトで数値抽出

Posted: 2014年1月02日(木) 01:00
by commandbeginner
みけさんありがとう~
本当に助かったし勉強になりました。