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

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

新規登録して質問してみよう
ただいま回答率
85.50%
MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

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

Q&A

解決済

1回答

2400閲覧

Xcodeでコマンドラインツールを使ったテキストファイルの読み込み

ryotakimoto

総合スコア1

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

コマンドライン

コマンドライン(別名:Command Line Interface)は、ユーザに命令の入力を促す(プロンプト)文字列の表示を行い、すべての操作をキーボードを用いて文字列を打ち込む事でプログラムを走らせるユーザインターフェースです。

コンパイルエラー

コンパイルのフェーズで生成されるエラーです。よく無効なシンタックスやタイプが含まれているとき発生します。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

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

0グッド

0クリップ

投稿2020/08/03 02:08

前提・実現したいこと

オンラインコースでC++の勉強を始めた初心者です。
10人分の顧客のデータ(年齢、性別、収入)が書かれたテキストファイル(dev_people.txt)を読み込み、ユーザーが入力した任意の条件(年齢、収入20,000ドル以上50,000ドル以下、など)に合った顧客を抽出するマーケティングプログラムを作るという課題に挑戦しています。

ですが、はじめに提供されるスターターコードを直す以前に、まずテキストファイルを読み込むことができずに困っています。

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

コードをXcodeでコンパイルしても、下記のメッセージが出てテキストファイルを読み込むことがでいません。

Usage: [EXECUTABLE FILE] [TEXT DATA FILE], e.g. myprog.exe dev_people.txt Program ended with exit code: 1

該当のソースコード

#include <iostream> #include <fstream> #include <vector> #include <string> using namespace std; // Define a Person class, including age, gender, and yearlyIncome. class Person { public: Person(); void Print(); void SetData(int a); // FIXME Also set gender and yearly income int GetAge(); private: int age; string gender; int yearlyIncome; }; // Constructor for the Person class. Person::Person() { age = 0; gender = "default"; yearlyIncome = 0; return; } // 他の関数など // Get a filename from program arguments, then make a Person for each line in the file. bool ReadPeopleFromFile(int argc, char* argv[], vector<Person> &people) { Person tmpPrsn; ifstream inFS; int tmpAge = 0; string tmpGender = ""; int tmpYI = 0; if (argc != 2) { cout << "\nUsage: [EXECUTABLE FILE] [TEXT DATA FILE], e.g. myprog.exe dev_people.txt" << endl; return true; // indicates error } cout << "Opening file " << argv[1] << ".\n"; inFS.open(argv[1]); // Try to open file if (!inFS.is_open()) { cout << "Could not open file " << argv[1] << ".\n"; return true; // indicates error } while (!inFS.eof()) { inFS >> tmpAge; inFS >> tmpGender; inFS >> tmpYI; tmpPrsn.SetData(tmpAge); // FIXME Also set gender and yearly income tmpPrsn.Print(); people.push_back(tmpPrsn); } inFS.close(); cout << "Finished reading file." << endl; return false; // indicates no error } int main(int argc, char* argv[]) { vector<Person> ptntlCstmrs; bool hadError = false; int ageLowerRange = 0; int ageUpperRange = 0; hadError = ReadPeopleFromFile(argc, argv, ptntlCstmrs); if( hadError ) { return 1; // indicates error } // その他main関数 return 0; }

試したこと

・コマンドラインツールがXcodeにダウンロードされていることは確認済みです。
・dev_people.txtをexeファイルと同じフォルダに入れました。

exeファイルのパス : /Users/ユーザー名/Library/Developer/Xcode/DerivedData/07_MarketingSoftware-dqcujycyvablckbmijqyouhnanyx/Build/Products/Debug/07_MarketingSoftware

カレントディレクトリもこのDebugディレクトリを示しており、同じディレクトリにテキストファイルがあるのに、なぜ読み込めないのかわかりません。。

初めての質問で不足情報もあるかもしれませんが、よろしくお願いします。

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

macOS Catalina Version 10.15.6
Xcode Version 11.5 (11E608c)
Xcode Command Line Tools 11.5 11E608C

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

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

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

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

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

episteme

2020/08/03 06:14

実行時、コマンドラインにテキストファイル名を与えていますか?
cateye

2020/08/03 09:04

macなのにexeって?・・・まぁ、実行ファイルのネーミングはなんでも良いけど・・・
ryotakimoto

2020/08/03 13:25

@episteme 様 Xcode -> Product -> Scheme -> Edit Scheme -> Arguments -> Arguments Passed On Launch にdev_people.txtを追加したら読み込みできました! 上記の作業が「コマンドラインにファイル名を与える」という作業になるのでしょうか?
episteme

2020/08/03 13:29

Arguments Passed On Launch : 起動時に(on launch)引き渡される(passed)引数(arguments) ですから、それでOKのようです。(Xcodeしらんけど)
ryotakimoto

2020/08/03 13:47

ありがとうございました!^^
guest

回答1

0

自己解決

Xcode -> Product -> Scheme -> Edit Scheme -> Arguments -> Arguments Passed On Launch にdev_people.txtを追加したら読み込めるようになりました。

投稿2020/08/03 13:54

ryotakimoto

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問