解析入力テキストファイルの読み込み方

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
むら

解析入力テキストファイルの読み込み方

#1

投稿記事 by むら » 13年前

掲示板をはじめて利用させていただきます。

gccで解析プログラムを作っています。

いまは、ハードコードを書いて直接変数・配列にデータを入れてテストしています。
ちょっとレベルアップしてテキストファイルから読み込んでやってみようと、考えていて、
頭に思い浮かんだのが
プログラムは一行読み込んで分解し、変数・配列に格納です。
このやり方だと、行番や一行ごとの数字の数がずれると、最悪です。
そこをうまくやるのが、プログラミングだとおもうのですが、
ほんとにみんなこうやってんのかな?といった疑問が頭をよぎります。
テキストファイルから読み込む妙案があれば教えてください。

5,9 //iN・iM
0,1,2,3,4 //N1
1,2,3,4,5 //N2
....
//は便宜上のコメント

ある程度変則なデータ形式でも対応できる考え方があれば教えてください。
iniファイル的な形のものも一つのアイデアですが、出力はできても、手入力はちょっとです。
エクセルに入力してVBAで読み込んでdllへも既知です。

アバター
h2so5
副管理人
記事: 2212
登録日時: 15年前
住所: 東京
連絡を取る:

Re: 解析入力テキストファイルの読み込み方

#2

投稿記事 by h2so5 » 13年前

自分だったらXMLなどを使うと思います。
ライブラリやエディタなどはそれこそ腐るほどありますし。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 解析入力テキストファイルの読み込み方

#3

投稿記事 by softya(ソフト屋) » 13年前

> iniファイル的な形のものも一つのアイデアですが、出力はできても、手入力はちょっとです。
それだとxmlも不可でしょうか?
あとインタプリタ風の構文処理にして、C言語の初期化の書き方と言う手もありますけどね。

自由度が高いためには、ある程度構文を考える必要がありますが、それだと手間は増えます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

むら

Re: 解析入力テキストファイルの読み込み方

#4

投稿記事 by むら » 13年前

ご返信ありがとうございます。
具体的なハードコードは下記の様にしていて
部材数が多くなると結構煩雑。
xmlもちょっと面倒的な気持ち。。。htmlタグを書くような感じなので。
ほかにもこんな手があるよというのを教えてほしいです。
xmlもその一つとして、いただきます。

私の思っているのは、テキストエディタでガンガンテンキーのみでうてて、
コメントもいれてもロバストでデータの順番が入れ替わっても・・・
特に指定はないのですが、知識の幅を広げたいのもあります。

コード:


		case 4:{		//テストデータはオリジナル

			//解析時間
			o2->dTime=0;

			//節点数	//部材数
			o2->iNode=3;	o2->iMemb=2;

			//配列を確保
			o2->fcSetArr(); //private member

			//節点支持状態	=0:支点でない =1:固定支点 =2:ピン支点 =3:水平ローラー支点
			o2->iSup[0]=1;o2->iSup[1]=0;o2->iSup[2]=0;
			//節点座標
			o2->dXNode[0]=0;o2->dYNode[0]=0;
			o2->dXNode[1]=0;o2->dYNode[1]=300;
			o2->dXNode[2]=400;o2->dYNode[2]=300;
			//部材端番号
			o2->iN1[0]=0;o2->iN2[0]=1;
			o2->iN1[1]=1;o2->iN2[1]=2;
			//弾性係数 断面積
			o2->dE[0]=20500;o2->dI[0]=1805.6;o2->dA[0]=26.67;
			o2->dE[1]=20500;o2->dI[1]=1805.6;o2->dA[1]=26.67;
			//節点荷重
/*
			o2->dYNodeLoad[1]=-3;
			o2->dYNodeLoad[2]=-4;
*/
			//中間荷重用 固定端反力 基準座標系
			// 左回 ←|-----------------------|←右回
			//       ↑                       ↑

			o2->dXiMembLoad[0]=0.0;	o2->dYiMembLoad[0]=0.0;	o2->dMiMembLoad[0]=0.0;
			o2->dXjMembLoad[0]=0.0;	o2->dYjMembLoad[0]=0.0;	o2->dMjMembLoad[0]=0.0;

			o2->dXiMembLoad[1]=0.0;	o2->dYiMembLoad[1]=49.0;	o2->dMiMembLoad[1]= 4900.0;
			o2->dXjMembLoad[1]=0.0;	o2->dYjMembLoad[1]=49.0;	o2->dMjMembLoad[1]=-4900.0;

			break;
		}
 

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 解析入力テキストファイルの読み込み方

#5

投稿記事 by softya(ソフト屋) » 13年前

データの順番を入れ替えてもってのは識別子という判定基準がないので難しいですね。
あとは、構文解析処理で作れそうな気がします。

/5,9/ //コメント
/0,1,2,3,4/ //コメント
/1,2,3, //コメント
4,5/ //コメント

ぐらいなら構文解析をちゃんと作ればOKです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 解析入力テキストファイルの読み込み方

#6

投稿記事 by softya(ソフト屋) » 13年前

ただ、結局データの打ち込みと後々の修正・チェックしやすいと言う観点からするとExcelで入力してcsvとするのが一番多いパターンなのでは?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

むら

Re: 解析入力テキストファイルの読み込み方

#7

投稿記事 by むら » 13年前

softya(ソフト屋) さんが書きました:データの順番を入れ替えてもってのは識別子という判定基準がないので難しいですね。
あとは、構文解析処理で作れそうな気がします。

/5,9/ //コメント
/0,1,2,3,4/ //コメント
/1,2,3, //コメント
4,5/ //コメント

ぐらいなら構文解析をちゃんと作ればOKです。
構文解析か。やっぱりここに行きつくか。。。
なんとなくわかっていたような。
未知の世界なので。

トークンに分けて・・・のーみそばーん。
チャレンジしがいがありそうです。
気のきいたライブラリがあればと。
softya(ソフト屋) さんが書きました:ただ、結局データの打ち込みと後々の修正・チェックしやすいと言う観点からするとExcelで入力してcsvとするのが一番多いパターンなのでは?
恐ろしいほどごもっともです。
csv出力は気づきませんでした。

このトピはすでに着地点についた気がしてきましたが、
csvならすでに考え付いていることなのです。
もうちょっと楽したい。さらなる妙案がございましたら。
不躾ながらご容赦を

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 解析入力テキストファイルの読み込み方

#8

投稿記事 by softya(ソフト屋) » 13年前

ちなみにExcelのVBAで加工出力するならバイナリファイルを作ることもできます。
あるいは、テキスト→perl(構文解析・整形)→C言語(入力のみ)って方法もあります。

C言語で字句・構文解析するならyacc/lexが定番ですね。

【補足】
構文解析する参考

「Cプログラミング講座第3回「数式の構文解析」」
http://www.wakayama-u.ac.jp/~takehiko/h ... arsing.htm
「プログラム言語を作る! - Part1 誰でも作れるプログラム言語:ITpro」
http://itpro.nikkeibp.co.jp/article/COL ... 248581/?k2
「C言語-目次」
http://masudahp.web.fc2.com/cl/
「プログラミング言語を作る」
http://kmaebashi.com/programmer/devlang/index.html
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

むら

Re: 解析入力テキストファイルの読み込み方

#9

投稿記事 by むら » 13年前

構文解析する参考文献のご提示ありがとうございます。

めがぐるぐるしています。
コードを参考にトークンに分けて先頭の記号により
スイッチで読み込む形式でやってみます。

簡単なものはないってことで了解しました。

閉鎖

“C言語何でも質問掲示板” へ戻る