- ベストアンサー
テキストデータから一部の情報を抜き出して,別のテキストデータに書き出す方法
- テキストデータから一部の情報を抜き出して,別のテキストデータに書き出す方法について解説します.DOSの知識が必要になりますが,具体的な処理の記述やMATLABを利用した処理方法も紹介します.
- 質問内容は2点あります.まず,「do @echo %a」という記述について理解が欲しいとのことです.また,よりスマートな記述方法についても検討しています.
- MATLABを使用して直接この処理を行う方法についても知りたいとのことです.MATLABを介さずに処理を行う方法も解説します.
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>正確には「echo@に代わるコマンドは何かないか」と聞きたかったです. 残念ながら無いですね。 DOSのファイル追加書き込みは「>>」です。 そして、「>>」の左辺で、書き込む内容(今回のケースは変数「%a」)を標準出力に出してあげる必要があり、そのコマンドが「echo」です。 >前半で,aに値を格納し終わった後に, >「aを表示しない」という指令を出しているように見えて, tskskgtさんが気にしているのは、「@echo」って書くと「echo」をコメントアウトしてるように見えるということですか? (違うなら言ってください) もしそうであれば、標準出力にechoの結果が出てもいいなら単純に del id_list.txt & for /F "tokens=1 delims=_" %a in (filename_list.txt) do echo %a >> id_list.txt で良いです。 いやいや標準出力に出したくないから「@」を付けてるんだよ、ということであれば、強引(?)にこんな書き方もできます。 (1) echo off & del id_list.txt & for /F "tokens=1 delims=_" %a in (filename_list.txt) do echo %a >> id_list.txt コマンドプロンプト上では、これを実行した後に「echo on」を実行しないとプロンプトが戻ってこないのでやや難あり。 (&で連結して最後だけecho onできるんだろうか。。。?) (2) cmd /q /c "del id_list.txt & for /F "tokens=1 delims=_" %a in (filename_list.txt) do echo %a >> id_list.txt" プロセスを1個(cmdの分)立ち上げてしまうという難あり。 ですが、 >質問の意図としては,普段からDOSのプログラムを見てる人が見て >不自然ではないかということと,もっと直感的な理解するための >ヒントを得ることでしたので,あのような質問をしました. 普段からDOSのプログラムを見てる人にとっては、最初の del id_list.txt & for /F "tokens=1 delims=_" %a in (filename_list.txt) do @echo %a >> id_list.txt の方が直観的で分かりやすいんじゃないですかね? まあ、私ならid_list.txtが無い時に最初のdelコマンドがエラーになるのでこんな書き方します。 type nul > id_list.txt & for /F "tokens=1 delims=_" %a in (filename_list.txt) do @echo %a >> id_list.txt
その他の回答 (2)
- crossgate
- ベストアンサー率65% (78/119)
>do @echo %a の意義(意味)というか処理内容が分からないので,それを理解したいということと forコマンドは、()で指定されたファイルに対してdo以降に書いたコマンドを実行する、という仕様です。 分解するとこんなイメージになります。 ・for /F "tokens=1 delims=_" %a in (filename_list.txt) do filename_list.txtの各行から、"_"で区切った1個目の値を「%a」に格納してdo以降のコマンドを実行する(をファイルが終わるまで繰り返す)。 ・@echo %a >> id_list.txt %aに格納された値をid_list.txtに追記する。 >前者についてはforの後には何らかの実行コマンドが必要だから無理やりつけている程度にしか理解できていません. 「@echo %a」(実際は「@echo %a >> id_list.txt」)は、tskskgtがやりたいという 「抜き出した値をファイルに書き込む」処理そのものです。 >よりスマートな記述ができやしないかということです. バッチだとこれが限界かと。
お礼
早速の回答ありがとうございます. 聞いたことには的確に答えて頂き,内容も理解できましたが, 質問内容が不十分でしたので,もしよろしければ追加で質問させてください. 正確には「echo@に代わるコマンドは何かないか」と聞きたかったです. 前半で,aに値を格納し終わった後に, 「aを表示しない」という指令を出しているように見えて, なんだか回りくどいというかベターな指令があるのでは? と思っています. 表現が適当かは分かりませんが,例えば「変数aをアクティブな状態にする」のような.
- 0909union
- ベストアンサー率39% (325/818)
>DOSの知識は皆無なので 別にDOSの知識が無くてもトンチンカンの質問です。 まず、MATLABを使用しているなら、ここに投稿する事自体、意味不明な行動。本当にMATLABを使用しているのでしょうか? 普通ヘルプを見れば全てわかります。その程度の知識もなく、MATLABを使用しているのでしょうか? とりあえず、コマンドプロンプトを起動し、下記を実行してみてください。 >help コマンドのリストと概要がでますね。 > for /? forコマンドの説明がでています。何かキーを押すと次のページ移ります(パソコン初心者に見えるのでここまで説明) そこに書式がでています。つまりオプションが記載されていますね。 "do" 書式の一部です。do=何かを行う。と言う事で、それ以降何かの命令文を記述すると言う事ですね。 "echo"は >echo /? とすれば説明がでます。 以降なにか分からなければ、まずヘルプで検索。さらにネットで検索 検索例: ”DOS for リファレンス” それで分からない事だけを質問。パソコン初心者の、そこの君、わかったかな。
お礼
ご忠告ありがとうございます.
補足
忠告ありがとうございます. 初心者だということは否定しませんが,流石に挙げてくれていることはやりました. (だからこそ組めてます.) 質問の意図としては,普段からDOSのプログラムを見てる人が見て 不自然ではないかということと,もっと直感的な理解するための ヒントを得ることでしたので,あのような質問をしました. 簡単な質問だとは分かっていますが,周りに確認できる人間が おりませんので,ここに投稿しました.
お礼
重ね重ね丁寧な回答ありがとうございます. 初心者ながら大変よく理解できました. 私の理解が至っていなかった点は, >DOSのファイル追加書き込みは「>>」です。 >そして、「>>」の左辺で、書き込む内容(今回のケースは変数「%a」)を >標準出力に出してあげる必要があり、そのコマンドが「echo」です。 です.変数に値を格納した時点でそれがすぐ次の処理に使われる(今回の場合書き込まれる)内容として扱われると思っていたのでどうしてechoが必要なのかが分かっていませんでした. 同内容になりますが,「@」はコメントアウトを心配したのではなく,変数%aを扱える状態である(と勘違いしていた)のにわざわざ表示しないオプションを付けてまで変数%aを呼ぶ必要があったほかが釈然としなかったのです. >まあ、私ならid_list.txtが無い時に最初のdelコマンドがエラーになるのでこんな書き方します。 >type nul > id_list.txt & for /F "tokens=1 delims=_" %a in (filename_list.txt) do @echo %a >> id_list.txt ありがとうございます!自分でファイルを消しておきながら直後に作るのはどうもスマートな方法でないと思っていたのでこれでスッキリしました!crossgateさんがおっしゃるようにエラーも避けられますし,ぜひ使わせてもらおうと思います. 一応は処理できていましたが,恥を忍んで質問した甲斐がありました!! 本当にありがとうございます!!