質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

1269閲覧

c++ ファイル読み込み

kai_programing

総合スコア3

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2020/11/11 12:10

前提・実現したいこと

下のファイルはヒストグラムをガウスフィッティングした際に得られたfit.logをtxtデータにしたものです。このファイルを読み込んでa,b,cの値だけを使いたいのですがやり方がわかりません。どなたかご教授ください。

data

1//data.txt 2#!/usr/local/Cellar/gnuplot/5.2.6/bin/gnuplot 3# 4# 5# G N U P L O T 6# Version 5.2 patchlevel 6 last modified 2019-01-01 7# 8# Copyright (C) 1986-1993, 1998, 2004, 2007-2018 9# Thomas Williams, Colin Kelley and many others 10# 11# gnuplot home: http://www.gnuplot.info 12# faq, bugs, etc: type "help FAQ" 13# immediate help: type "help" (plot window: hit 'h') 14GNUTERM = "aqua" 15a = 30.3102839263463 16b = 231.147678636274 17c = 31.1418667056724 18d = 1.80634716477414 19e = 145.490926521049 20f = 3.38134607933363 21FIT_CONVERGED = 1 22FIT_NDF = 1 23FIT_STDFIT = 0.503848068070785 24FIT_WSSR = 0.253862875698662 25FIT_P = 0.614368147112438 26FIT_NITER = 36 27a_err = 1.47280940418519 28b_err = 2.16603907705838 29c_err = 2.92486713996413 30d_err = 0.477995565225803 31e_err = 0.990181603129049 32f_err = 1.21186090163887 33# EOF 34

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

c++

1#include <iostream> 2#include <fstream> 3#include <string> 4#include <stdlib.h> 5#include <math.h> 6#include <vector> 7#include <iomanip> 8#include <typeinfo> 9#include <boost/format.hpp> 10 11using namespace std; 12 13int main(){ 14 15 string filename = "data.txt"; 16 string str; 17 int num; 18 ifstream ifs(filename); 19 20 while(getline(ifs,str)){ 21 cout << "#" << str << endl; 22 23 } 24 cout << "done" << endl; 25 26} 27

試したこと

下のようにそのまま出力することは可能なのですが、a,b,cの値だけを取り出したいです。取り出した後は計算に使います。

outcome

1##!/usr/local/Cellar/gnuplot/5.2.6/bin/gnuplot 2## 3## 4## G N U P L O T 5## Version 5.2 patchlevel 6 last modified 2019-01-01 6## 7## Copyright (C) 1986-1993, 1998, 2004, 2007-2018 8## Thomas Williams, Colin Kelley and many others 9## 10## gnuplot home: http://www.gnuplot.info 11## faq, bugs, etc: type "help FAQ" 12## immediate help: type "help" (plot window: hit 'h') 13#GNUTERM = "aqua" 14#a = 30.3102839263463 15#b = 231.147678636274 16#c = 31.1418667056724 17#d = 1.80634716477414 18#e = 145.490926521049 19#f = 3.38134607933363 20#FIT_CONVERGED = 1 21#FIT_NDF = 1 22#FIT_STDFIT = 0.503848068070785 23#FIT_WSSR = 0.253862875698662 24#FIT_P = 0.614368147112438 25#FIT_NITER = 36 26#a_err = 1.47280940418519 27#b_err = 2.16603907705838 28#c_err = 2.92486713996413 29#d_err = 0.477995565225803 30#e_err = 0.990181603129049 31#f_err = 1.21186090163887 32## EOF 33done

補足情報(FW/ツールのバージョンなど)

mac,xcode

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まずは、1行づつ読み出すようにしといて、
a =
b =
c =
で始まる行を抽出して、=で分割して数値変換すればいいということになります。
これでコードを書いていきましょう

投稿2020/11/11 12:24

y_waiwai

総合スコア88042

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

C++

1#include <iostream> // cout, endl 2#include <fstream> // ifstream 3#include <sstream> // istringstream 4#include <string> // getline 5 6using namespace std; 7 8int main() 9{ 10 string filename = "data.txt"; 11 ifstream ifs(filename); 12 double a, b, c, val; 13 string str, var, eq; 14 15 while (getline(ifs, str)) { 16 istringstream iss(str); 17 if (iss >> var >> eq >> val && eq == "=") { 18 if (var == "a") a = val; 19 else if (var == "b") b = val; 20 else if (var == "c") c = val; 21 } 22 } 23 cout << "a: " << a << endl; 24 cout << "b: " << b << endl; 25 cout << "c: " << c << endl; 26}

これでどうでしょうか?

投稿2020/11/11 15:06

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kai_programing

2020/11/12 08:36

私の勉強不足でstringstreamというものを初めて知りました。stringstreamを調べたらすごく便利で今後も色々なことに使えそうだと思いました。コードは問題なく実行できて、私の理想通りの結果になりました。kazuma-s様ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問