• ベストアンサー

基本なのですが・・(ファイルのデータで計算したい)

txtファイルの中に、j、x、yという変数の数値データの羅列がある時、BASICなら INPUT #1 J#,x#,y# と書いて、j,x,yの数値データをパソコンの中に収納できるじゃないですか。 そして、例えばxの値をそれぞれ対応するyの値に掛けた 答えをzとして新しいファイルにSAVEするという事がBASIC ならできます。 でも、C言語では、そういうプログラムの説明が載ってないんです!! ただ、ファイルの中身を画面上に出すだけのプログラムでなく、ファイルの中のデータを用いてパソコンに計算を させる事ができるプログラムの書き方が載っているWEBか、 プログラム自体を教えて下さい。お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
noname#12862
noname#12862
回答No.2

--- sample.txt --- 100,1000 --- console.c --- #include <stdio.h> void main(){ FILE *fp; int x,y,z; fp = fopen("sample.txt","r"); if(fp==NULL){ printf("error\n"); return; } fscanf(fp, "%d,%d",&x,&y); // ファイルから読み込み z = x+y; //読み出した値の加算 fclose(fp); printf("%d\n",z); } vcでは出来ましたよ。 fopen() -> ファイルに書き込み fscanf() ->ファイルから読み取り 他にも、ファイル入出力関数多数。 1の方のリンクを参照してください。

参考URL:
 

その他の回答 (2)

noname#12862
noname#12862
回答No.3

訂正: ×)fopen() -> ファイルに書き込み ○)fprintf()-> ファイルに書き込み でした。

  • 0shiete
  • ベストアンサー率30% (148/492)
回答No.1

たとえば、下のURLはいかがでしょう?

参考URL:
http://www005.upp.so-net.ne.jp/h-masuda/ProText/CKiso/ck0405.html
eva2015
質問者

補足

fopenでは読み込んだ数値をそのまま プログラム中の計算式に用いる事はできないのではないでしょうか. ただ,画面上に出力されるだけだと思われるのですが

関連するQ&A

  • C++ファイルからデータ入力して計算、ファイル出力

    C++初心者です。 ファイルの数値データを入力して、それらを計算してからファイルに出力する方法がわかりません。 たとえば、 入力ファイル   出力ファイル 行数  x y z (1)  1 1 6   y(1)*exp(z(1)-x(1))+y(2)*exp(z(2)-x(1))+... (2)  3 5 2   y(1)*exp(z(1)-x(2))+y(2)*exp(z(2)-x(2))+... (3)  5 6 9  y(1)*exp(z(1)-x(3))+y(2)*exp(z(2)-x(3))+... (4)  9 1 3   y(1)*exp(z(1)-x(4))+y(2)*exp(z(2)-x(4))+… (5)  1 7 8   y(1)*exp(z(1)-x(5))+y(2)*exp(z(2)-x(5))+... 入力したデータを上記のように計算してから出力ファイルにしたいのですが、複雑なのでプログラムをどう組み立てれば良いのかわかりません。 ちょっとしたことでも結構です、参考になりそうなサイトや、ロジック、プログラムに関するアドバイスいただけませんか。

  • ファイルのデータの並べ替えについて

    data.txtに入力されたA 100 B 300 C 200 D 300を 数値の大きい順に並べて、data2.txtに出力するプログラムを作成したいのですが何をすればいいのかわかりません。 一応、data.txtファイルはプログラムできました。 ヒントだけでもいいので教えてください。 あと、同点の場合はアルファベット順にしたいです。 よろしくご指導お願いします<(_ _)>

  • ファイルを読み込んで入力する方法

    C++についての質問です。 あるファイル(テキストでもエクセルでもCSVでも可)に書かれている数値を読み込んで、プログラム内で入力する方法が知りたいです。 例えば、"test.txt"というファイルに 1 2 3 4 5 3 2 3 1 2 というような数字の羅列があった場合に、プログラムのmain関数内の {x1[0],x2[0],x3[0],x4[0],x5[0]} {x1[1],x2[1],x3[1],x4[1],x5[1]} のような場所に、順番に入れて行きたいです。 "a.txt"の中の1行目を左から順にx1[0],x2[0],x3[0],x4[0],x5[0]に入力し、次に2行目を同じく左から順に・・・というように、"a.txt"ないの行数だけ入力していけるプログラムを考えています。 どなたかご教授していただけないでしょうか。 拙い文章で申し訳ありません。

  • テキストデータの読み込みについて

    C言語のテキストデータの読み込みについてです。 C言語のプログラムについてです。 2444,1114,2807, 1984,2845,2086, 658.1,-1564.0,1239.7, -102.0,958.4,123.1, 12.7,6.0,82.7 2439,1110,2802, 1973,2865,2108, 658.8,-1563.7,1239.6, -102.0,957.1,121.9, 12.8,6.0,82.7 2441,1106,2806, 1967,2888,2124, 659.4,-1563.5,1239.5, -102.2,956.4,121.0, 12.8,6.1,82.8 2440,1109,2808, 1964,2896,2127, 660.0,-1563.3,1239.4, -102.7,956.2,120.7, 12.8,6.1,82.8 2441,1112,2807, 1981,2894,2120, 660.6,-1563.0,1239.4, -103.3,956.2,120.1, 12.8,6.1,82.8                                       ↑ 上の様なカンマとスペースで15個に区切られているtxtファイルがあるのですが、このtxtデータの10コ目と11コ目をを計算で使いたく、取り出したいと考えているのですがscanfを使いどのように取り出すことが出来るのか、また取り出したデータから数値を引くことを教えて頂きたいです。 つまり -102.0   958.4 -102.0   957.1 -102.2 と 956.4 -102.7   956.2 -103.3   956.2,             を取り出して計算に使いたいです。 そして1番上の数値だと、 -102.0と958.4 を読み込み、例えばそれぞれ100を引いた値を配列に入れたいです。 -102.0と958.4 → -202.0 と 858.4 のように取り出したいです。 教えて頂きたいです。お願いします。

  • Perlでのファイル内データ処理方法について

    プログラミングを始めたばかりです。 Cygwin上でPerlを行っています。 下に示すように、計算プログラムの中にデータを記入し、そのデータを処理することは出来たのですが、外部のファイルを読みそのデータを処理する方法が分かりません。 # y = ax + bを求める @x=(1,2,3); @y=(1,4,9); for($i=0;$i<$n;$i++){ $A = $A + ($y[$i] * $y[$i]); $B = $B + ($x[$i] * $x[$i]);   ・   ・   ・ $a=・・・ $b=・・・ print("a=$a,b=$b"); パールファイル(.pl)内に @x=(1,2,3); @y=(1,4,9); のように記載すると、データが変わるたびにファイル内の数値を入れ替えないといけないと思うのですが、cygwinのウィンドウに、 $ ./lesson.pl 10 <data1.csv のように入力しEnterすると、ファイル内の数値を入れ替えないで指定したファイル(ここではdata1.csv)のデータが処理されると思うのですが、その場合パールファイルをどのように記述すればよいのでしょうか。また、cygwinのウィンドウにどのように入力すればよいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • csvファイルの特定のセルから読み込み

    C++についての質問です。 あるファイル(テキストでもエクセルでもCSVでも可)に書かれている特定のセル数値(整数)を読み込んで、プログラム内で入力する方法が知りたいです。 例えば、"test.txt"というファイルに 1 2 3 4 5 3 2 3 1 2 というような数字の羅列があった場合に,2行目4列目のセルの値を読み込む プログラムは、どうのうにすればできるでしょうか?

  • バッチファイルでの計算方法

    一行のみのtxtファイル(1111.txt)に日付 スペース 時間 スペース 値 が格納されています。 バッチファイルにて上記値に定数(6666)をかけ単位を追加して出力(2222.txt)したいとおもいます。 以下のように書いてみましたが どこが悪いかよくわかりません。 どなたかお教えいただきたいと思います @ECHO OFF FOR /F "eol=# tokens=1,2,3" %%a in (1111.txt) SET /A x=6666 SET y=%%c*%x% DO ECHO %%a %%b %%y >2222.txt

  • perl ファイルのデータを編集したい

    初めまして、perl をやり初めたばかりです。作業は Linux 上で行ってます。 あるテキストファイル data.txt があります。 data.txt の中は、以下のようになっているとします。 100 200 300 400 500 600 これを読み込んで、例えば、 1 2 3 4 5 6 以上の様に各数字を百分の一にして出力したいと思ってます。 一応、色々と調べながらプログラムを書いてはみましたが 思う様に出力されません。以下そのプログラム。 #!/usr/bin/perl open(IN, "data.txt") or die ; @x = <IN>; close (IN); $ref_x = \@x; $n_data = @x; for ($i = 0; $i< $n_data; ++$i) { $$ref_x[$i] /= 100 ; print $x[$i], " "; } print"\n"; どなたか、perl にお詳しい方教えていただけないでしょうか? 宜しくお願い申し上げます。

  • ファイルへのデータ書き出しが出来なくて困っています。

    openCVを利用し、用意した画像1、画像2間のオプティカルフローを計算し、画像3に描画するというプログラムを組みました。 その過程での、オプティカルフローのx成分「vel_x」、y成分「vel_y」の値をテキストファイルに書き出したいのですが、それぞれ「003B3340」「003B33E0」と記録されるだけで(多分アドレス?)うまくいきません。 どなたか詳しい方、ご教授いただけると幸いです。 環境はWindows XP、Visual C++ .NET2003です。 以下にコードを示します。 #include <cv.h> #include <highgui.h> #include <stdio.h> #include <fstream> const char *imgA_file = "01.bmp"; const char *imgB_file = "02.bmp"; using namespace std; int main(int argc, char** argv){ IplImage *imgA_src = cvLoadImage( imgA_file, -1); //画像読み込み IplImage *imgB_src = cvLoadImage( imgB_file, -1); IplImage *imgA = cvCreateImage(cvGetSize(imgA_src), IPL_DEPTH_8U, 1); cvCvtColor(imgA_src, imgA, CV_BGR2GRAY); IplImage *imgB = cvCreateImage(cvGetSize(imgA_src), IPL_DEPTH_8U, 1); cvCvtColor(imgB_src, imgB, CV_BGR2GRAY); IplImage *vel_x = cvCreateImage(cvGetSize(imgA_src), IPL_DEPTH_32F, 1); //x,y方向の速度を記録するバッファを確保する IplImage *vel_y = cvCreateImage(cvGetSize(imgA_src), IPL_DEPTH_32F, 1); IplImage *imgC = cvCloneImage(imgA); //結果画像用に入力画像をコピーする cvCalcOpticalFlowLK( imgA, imgB, cvSize( 11, 11), vel_x, vel_y); //オプティカルフローを求める,第3引数:ウインドウサイズ ofstream ofx("vel_x.txt"); //vel_x, vel_y のデータをテキストへ書き込み string buf; ofx << vel_x << endl; ofstream ofy("vel_y.txt"); buf; ofy << vel_y << endl; /* FILE *fp1, *fp2; //vel_x, vel_y のデータをテキストへ書き込み fp1 = fopen("vel_x.txt", "w"); fp2 = fopen("vel_y.txt", "w"); fprintf(fp1, "%d", vel_x); fprintf(fp2, "%d", vel_y); fclose(fp1); fclose(fp2); const CvArr *m, *n; // FILE *fp1, *fp2; fp1 = fopen("vel_x.txt", "r"); fp2 = fopen("vel_y.txt", "r"); fscanf(fp1, "%d", &m); fscanf(fp2, "%d", &n); fclose(fp1); fclose(fp2); */ for ( int i=0;i<imgA->height;i+=10 ){ //結果画像の作成 for ( int j=0;j<imgA->width;j+=10 ){ int dx = (int)cvGetReal2D( vel_x, i, j); int dy = (int)cvGetReal2D( vel_y, i, j); cvLine( imgC, cvPoint( j, i), cvPoint( j+dx, i+dy), CV_RGB( 255, 255, 255), 1, 8, 0); cvRectangle( imgC, cvPoint( j+dx-1, i+dy-1), cvPoint( j+dx+1, i+dy+1), CV_RGB( 255, 255, 255), 1, 8, 0); } } cvSaveImage( "03.bmp", imgC); //画像保存 cvReleaseImage( &imgA); cvReleaseImage( &imgB); cvReleaseImage( &vel_x); cvReleaseImage( &vel_y); return 0; }

  • perl 計算結果をファイルへ出力したい

    perl やり始めたばかりです。宜しくお願いします。 入力ファイル data.txt があるとします。 data.txt は、 123 456 789 333 555 777 以上のようなテキストファイルといたします。このファイルを 以下の様に100分の1にして出力したい。 1.23 4.56 7.89 3.33 5.55 7.77 と言うことで、この場で教えていただきました。それが、以下です。 #!/usr/bin/perl open(IN, "data.txt") or die ; @x = <IN>; close (IN); foreach $line (@x){ chomp($line); @elms = split(' ',$line); foreach $data (@elms){ print $data/100," "; } print "\n"; } おかげ様でこれはこれで上手く動きました。そこで、出力値をファイルに 書き込みたいのです。 もちろん、以下の様な方法でファイルに 書き込めるのは判っております。 計算プログラム.pl > outfile.txt しかし、上のプログラムをベースにファイルに書き込めないかと色々と 試してはみましたが、どうも上手く行きません。 どなたか教えて頂けないでしょうか? 宜しくお願い申し上げます。

    • ベストアンサー
    • Perl

専門家に質問してみよう