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

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

新規登録して質問してみよう
ただいま回答率
85.35%
ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

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

Q&A

1回答

916閲覧

.mtlファイルの文字列から一部の文字列を数値として変数に保存する方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

ファイル

ファイルとは、文字列に基づいた名前又はパスからアクセスすることができる、任意の情報のブロック又は情報を格納するためのリソースです。

Model

MVCモデルの一部であるModelはアプリケーションで扱うデータとその動作を管理するために扱います。

OpenGL

OpenGLは、プラットフォームから独立した、デスクトップやワークステーション、モバイルサービスで使用可能な映像処理用のAPIです。

C++

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

0グッド

0クリップ

投稿2021/12/28 10:09

編集2021/12/28 10:18

提示コードですが下記の.mtlファイルのnewmtl Material.001とありますがこの001の文字列を変数1として数値変数に保存したいのですが///コメント部のコードで文字を描画するまでは実装出来たのですが文字列から特定文字から先をを算出する方法が知りたいです。

newmtl Material.001 Ns 225.000000 Ka 1.000000 1.000000 1.000000 Kd 0.800000 0.800000 0.800000 Ks 0.000000 0.000000 0.000000 Ke 0.000000 0.000000 0.000000 Ni 1.450000 d 1.000000 illum 1 map_Kd hair.png newmtl Material.002 Ns 225.000000 Ka 1.000000 1.000000 1.000000 Kd 0.800000 0.800000 0.800000 Ks 0.000000 0.000000 0.000000 Ke 0.000000 0.000000 0.000000 Ni 1.450000 d 1.000000 illum 1 map_Kd skin.png

cpp

1// ##################################### .mtlファイル読み込み ##################################### 2std::shared_ptr<FrameWork::Material> FrameWork::GetMaterial(const char* path) 3{ 4#define LINE_BUFFER ((int)(500)) 5 6 FrameWork::Material mtl; 7 8 FILE *file; 9 fopen_s(&file,path, "r"); 10 if (file == NULL) 11 { 12 std::cerr << ".mtlファイルが開けません: " << path << std::endl; 13 assert(0); 14 } 15 else 16 { 17 while (true) 18 { 19 char line[LINE_BUFFER] = { '\0' }; 20 21 int res = fscanf_s(file, "%s", line, LINE_BUFFER); 22 23 if (res == EOF) 24 { 25 break; 26 } 27//////////////////////////////////////////////////////////////////////////////////////////////////////// 28 if (strcmp(line, "newmtl") == 0) 29 { 30 31 const char* str[500] = {'\0'}; 32 33 fscanf_s(file, "%s",str, LINE_BUFFER); 34 printf("%s\n",str); 35 } 36//////////////////////////////////////////////////////////////////////////////////////////////////////// 37 } 38 } 39 40 return std::make_shared<FrameWork::Material>(mtl); 41} 42

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

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

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

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

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

guest

回答1

0

C++

1#include <iostream> 2#include <string> 3 4int main() { 5 std::string str = "newmtl Material.001"; 6 // '.'以降をintに変換 7 int n = std::stoi(str.substr(str.find('.')+1)); 8 std::cout << n << std::endl; 9}

投稿2021/12/28 10:42

episteme

総合スコア16612

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問