我如何使我完成的程序读取文件,通过终端输入
How can I make my finished program read a file, via terminal input?
这是愚蠢的,但我已经完成了一个程序,在一个文件中使用…但问题是我不知道怎么在终端里指向它?我用的是macbook pro,现在要运行我的c++程序,我输入
"g++ fill .cpp -o main;。/主要"
但是现在我如何让我的FillMe程序实际读取文件呢?我如何在终端命令中指向它?谢谢。
工作代码如下:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
class Text {
string text;
public:
Text() {}
Text(const string& fname) {
ifstream ifs(fname.c_str());
string line;
while (getline(ifs, line))
text += line + 'n';
}
string contents() {
return text;
}
};
int main(int argc, char* argv[]) {
if (argc > 1)
{
Text t1;
Text t2(argv[1]);
cout << "t1 :n" << t1.contents() << endl;
cout << "t2 :n" << t2.contents() << endl;
}
}
"
$ g++ FillMe.cpp -o main
$ ./main
如何在终端命令中指向它?
你有几个选择。
对于您的实际设置,您希望看到来自程序命令行参数的文件名。对于多个文件参数你需要在循环
中访问它们 if (argc > 1) {
for(int i = 1; i < argc; ++i) {
Text txt(argv[i]);
cout << "txt:n" << txt.contents() << endl;
}
和从命令行
调用$ ./main file1.txt file2.txt file3.txt
我认为更好更灵活的解决方案是让程序默认从标准输入读取。因此,您可以简单地利用shell的输入重定向特性,例如管道
$ cat file1.txt file2.txt file2.txt | ./main
输入./main
的std::cin
输入流。
或者
$ ./main < myinputfile.txt
或这里记录的许多其他选项之一。
但后者取决于您的用例。如果您需要处理来自已知单独文件的输入,您最好使用argv
将名称作为程序参数传递。
./main可执行文件知道使用哪个CPP文件,因为程序中的这一行
Text t2(argv[1]);
所以当你输入
$ ./main input.txt
这一行使用命令行'input.txt'
中的参数1来构造一个新的Text对象。
结构由这一行负责:
Text(const string& fname)
这里你传递一个字符串名称给Text类,然后使用该文件名打开文件句柄
相关文章:
- C++文本文件输入
- C++ 中文件输入输出中的长长 v/s int
- 如何修复函数中的 fstream 文件输入以将正确的信息存储在结构数组中?
- 用空格填充 2D 数组(从文件输入)
- 流对象来表示文件输入,然后是标准输入?
- 用精神解析文件输入
- 从文件输入和输出
- 来自文本文件输入 c++ 的向量
- 如何通过键盘或分数文件输入分数
- 了解文件输入和输出,我可以写入文件,但无法从文件打印
- 词频程序 - 文件输入太大?
- 尝试从 csv 文件输入大量数据时出错
- 如何将文件从文件输入到C 中的矩阵中
- 如何从Windows CMD运行可执行文件并将其传递给文件输入的参数参数和重定向
- 如何解析文本文件并使用构造函数中的文件输入来创建对象的容器
- 这是读取文件输入的正确方法吗?
- 如何在 c++ 中使用二进制文件输入/输出读取/写入结构的字符串类型成员
- 如何创建一个具有空值、递减编号系统和.txt文件输入值的二维阵列网格
- C 文件输入流循环问题
- 使用对输入整数的文件输入