こちら.csvの内容の特定の条件を満たす行を取り込んで.txtに書き出しを行いたいと考えています。
こちらの.csvファイルの内容は、約1000ステージほど同じパターン
ID Reaction~
Node ~
・
・
Joint~
・
・
の繰り返し(数値が違う)で中身があり
画像の青くハイライトした部分のみを1ステージごとに1000ステージ分、テキストファイルに書き出すプログラムを教えてほしいです。
希望の出力
Node 1101 ~~~~~
Node 1101 ~~~~~
・
・
始めたばかりで、わからないので教えていただきたいです。
タグの[C][C++]は質問内容に関係するのでしょうか?
関係する場合はC,C++に関する詳細とコードを、質問を編集し追記ください。
関係ない場合はタグから削除してください。
これ、本当に CSV なんですか?
削除しました
このデータ「だけ」処理できればいいのであれば簡単です。
テキストエディタで編集すればいいでしょう。
そうでないなら仕様を明らかにしなければ変更に対応できません。
ここで対話できないなら、適当なエスパー回答で満足してもらうほかありません。
条件を明確にしてください。 また、元のファイルの内容についても詳細を示してください。
例えば、aで始まる行と、dで始まる行は、必ず交互に入っているのですか?
行の最初の文字が、a1,x1,a2,x2,d3,x3,d4 のように入れ子になっている可能性はありますか?
入れ子の可能性がある場合、上記の例では、どんな出力が欲しいのでしょうか?
すいません回答になっているかわかりませんが、具体的な内容を記載しました。
エスパー回答にベストアンサーをつけて追加質問をし、すぐに答えてもらえなければ外して質問を編集する人ですね。
そしてはじめたばかりなのになぜか気に入らない回答者がいて、それを無視すると。
coco_bauerさん
具体的な内容になるように編集をしました。
一応、内容は交互になっています
タグ[CSV]も関係ないので削除ください。
・・・質問が編集され、内容がガラッと変わっちゃいましたね。
Zuishinさん
回答をもらえたことに満足してベストアンサーを選んでしまっただけです。
もう少し具体的な回答がほしいため、内容を編集しました。
また、回答者を無視はしていません。
あなたが仕様をすぐに明らかにせず無視していたせいで、can110 さんの回答が哀れなことになっています。
Y.H.さん
削除しました。もう少し具体的に書いたほうがよいと思いましたので変更しました
csvじゃなくてtsv?
1フィールドが”Node”で2フィールドが1101の行を抜き出したいということ?
それなら、awkの方が簡単そうですね。
Zuishinさん
自分には、どこが哀れなのかわからないほど初心者なのですが、回答者さんに自分の質問によって不快な思いにさせていたら申し訳ないです。
t_obaraさん
ありがとうございます。awkも考えたのですがPythonが簡単とのことだったので質問をしていました。
もし、有効なものがなけれなawkに移行したいと思います。
いやいや、2行目が一番のポイントなのですが、なぜスルーするのでしょうか。Yesだから、awkに反応したという認識でしょうか。
そもそも「ステージ」っていうのが何を指しているのかも理解できないのですが、私だけ?
あの回答では、この質問の回答としては不適切です。
しかし、編集する前であれば成立していました。
質問が全く別物になったせいで、can110 さんの回答が無意味なものになりました。
can110 さんのせいではないのに、無意味な回答になったことを指して哀れと言いました。
回答する前に質問の意図を明確にするのがこの欄の役目です。
私のことをあなたが無視したせいで、「ああこの人は話が通じない人なんだな」と他の回答者に思わせてしまいました。
それでも答えるなら、このようなエスパー回答をするほかありません。
私は「エスパー回答で満足しろ」と言いましたよね?
なぜ今更別の質問をしてるんですか?
これはまったく違う質問です。
t_obaraさん
すいません、フィールドがあまりわからないので、あっているかわかりませんが
Node 1101 ~
は同じ行にあって、それごと抜き出したいということです。
KojiDoiさん
こちらの解析ソフトのステージをそのまま使用していました。すいません
ステージというのは、繰り返しの数のことです。
1000ステージというのは、1000回同じ内容(数値は違う)がでてくるということです。
フィールドが分からない。。csvで質問しているのであれば、wikiでcsvを調べるとかしてみてはいかがでしょうか。
「それごと」とは何を意図しているのでしょうか。
画像で示してある内容が「一つのステージ」の中身であるという理解でいいのですか?
> 1000ステージごとにテキストファイルに書き出す
これは1000.txt 2000.txtのようにファイルを分けて出力するということですか?
t_obara さん、CSV でも TSV でもありませんね。複合フォーマットのテキストデータで、テーブル部分もタブではなく複数の空白で区切られているようです。
> tatsukiiiさん
この欄に書くのもなんですが、半身で回答したのでとくには気にしていません。
というかitertoolsでテキスト生成したかっただけな回答なので :p
t_obaraさん
失礼しました。Node の行の8フィールドまでを1000ステージ分抜きだしたいということです
KojiDoiさん
まさにそのとおりです。
Y.H.さん
1000ステージごとではなく、1ステージごとに書きだすのを1000ステージ分です。
すいません、なおします
> Zuishinさん
確かに提示された内容を見るとそうですね。。
> tatsukiiiさん
であれば、先頭にNodeである行を抜き出せば良いのですね
フィールドはどのように区切るのでしょうか。画像だと何もわかりませんが。。
とりあえずそのファイルをどこかにアップロードされてはどうでしょうか。
実際のファイルを確認できないことには誰も回答できないと思います。
t_obaraさん
フィールドをカンマで区切りたいのですが、このデータが解析ソフトから直接出力されるもので、なかなかこのデータをいじることができないので困っています。
質問に質問で申し訳ありませんが、ID Reaction~ という文字列を見つけたらその下の行を読み込むということは可能なのでしょうか?
> 1ステージごとに書きだすのを1000ステージ分
えーと、要件がよくわからないです。
・結果は、1000ファイルになるということですか?
例:
0001.txt
0002.txt
0003.txt
・・略・・
1000.txt
・1ステージとは何をもって判断しますか?
例:
" ID Reaction ・・・・" で始まり
"Node 0000 ・・・・" が続き
・・・・
空行で終わる
「画像の青くハイライトした部分」の定義をちゃんと言葉で定義してください。
素直に解釈すると、
「ID Reaction of Internal Forceの直後から空行までの間の行のうち、Node 1101で始まるものだけを出力したい」
と読めますが、これであっていますか。それとも別の何かですか。それを明らかにして初めて「まともな質問」だと思います。
tiitoiさん
載せたいのですが、全内容を載せることはできないので、この一部データでご勘弁ください
質問の内容があいまいなので皆困っているのに、次々内容を変えたり「質問を質問で返したり」するのは止めなさい。話を収束させる気はあるのですか?
日本語で説明できないみたいだからデータよこせ俺が見るって言われてるんですよ。
質問を文章に起こして、それを知人や友人に読んでもらいましょう。
読んだ人から質問や「判らない」という感想が出たら、書き直しましょう。
少なくとも質問を読んだ人の75%が理解できる内容の文章が出来上がったら、改めて質問してください。
すぐに全く異なる内容に書き換えられる質問につきあうのは、嫌です!
Y.H.さん
1000ステージ分のデータを1ファイルにまとめたいです
KojiDoiさん
「ID Reaction of Internal Forceの直後から空行までの間の行のうち、Node 1101で始まるものだけを出力したい」まさにその通りです
> 全内容を載せることはできないので、この一部データでご勘弁ください
csv と記載されていますが、提示されているファイルのフォーマットは csv でないため、ファイルの内容を確認する必要があります。
質問する上で必要となるデータは提示していただけないと回答できません。
ファイルを提示できないのであれば、こういうところで質問するのではなく、(会社なのか、研究室なのかわかりませんが)身内で解決してください。
> Node 1101で始まるものだけ
Node 1102で始まるものや Node 110など数字が3桁未満のものは不要ということでよいですか?
一番最初の質問を見る限り、まだ隠された要件がありそうです。
Y.H.さん
詳しくいいますと、ID Reaction ~の中のNode 1101で始まるものだけです。
> Node 1101で始まるものだけ
Node 11010 など五桁ものも含まれますがそれでよいですか?
出力フォーマットを変換する必要がないのであれば、以下のような感じでしょうか。
ファイルを開き、1行ずつ読み、
所定の文字列があったら、次の行から抽出準備をし、
Node 1101が見つかったら実際に抽出をして、リストなどに保存
ファイル全て読み終わったら、リストをファイルに書き出す
Y.H.さん
Node 1101のみデータがほしいです。
t_obaraさん
ファイルを開き、1行ずつ読み、
所定の文字列があったら、次の行から抽出準備をし、
Node 1101が見つかったら実際に抽出をして、リストなどに保存
ファイル全て読み終わったら、リストをファイルに書き出す
はい、そうです。この内容のプログラムを教えていただきたかったのです。
コーディングが全くできないということですかね。
始めたばかりと書いてるけど、本当は Python 使ったこともないから作ってくれということでしたか。
なるほど、コードが書いてある回答をすぐベストアンサーにした意味がわかりました。
> Node の行の8フィールドまで
(1) ID Reaction ~ の中のNode 1101のデータに9フィールド以上存在する場合はありますか?
(2)ID Reaction ~ **以外**の中のNode 1101 のデータに8フィールドの物は存在しますか?
まずはファイルをコピーするプログラムを作ってみましょう。
