//all variables are declared in a struct StockPile
//...
string itemid;
string itemdesc;
string datepurchased;
string line;
int unitprice;
int totalsales;
std::string myline;
//...
void displaydailyreport() {
ifstream myfile("stockdatabase.txt");
for(int i=0;std::getline(myfile,myline);i++)
{
// Trying to grep all data with a specific date from a textfile,
cout<<system("grep "<<stockpile[i].datepurchased<<" stockdatabase.txt")<<endl;
}
cout<<endl;
}
当我尝试编译时,它给了我这个错误:
note:template argument deduction/substitution failed:
Main.cpp:853:40: note: mismatched types ‘std::basic_ostream<_CharT, _Traits>’ and ‘const char [6]’
cout<<system("grep "<<stockpile[i].datepurchased<<" stockdatabase.txt")<<endl;
当我尝试使用它时,它可以正常工作:
cout<<system("grep '9oct16' stockdatabase.txt")
stockpile[i].datepurchased
是我可以cout
存储在文本文件中的不同日期的地方,我可以在for循环中打印出stockpile[i].datepurchased
个值。
它返回字符串9oct16,10oct16等但是当我尝试使用shell命令时它不会编译。
答案 0 :(得分:4)
<<
运算符是流运算符。虽然您可以在流上(例如cout
)将字符串(和c字符串)与它们连接起来,但如果没有实际处理流,它就不会以这种方式工作。
让我们单独在系统调用中使用语句
"grep "<<stockpile[i].datepurchased<<" stockdatabase.txt"
<<
并不意味着在没有流对象的情况下以这种方式使用{&#34; stream&#34;成。
您可以做的是以下内容:
std::string command = "grep "
+ stockpile[i].datepurchased
+ " stockdatabase.txt"
system(command.c_str());
这可以做几件事。
std::string
以存储系统命令datepurchased
已经是std::string
,您可以在其他c字符串上使用+运算符来连接它们。const char*
作为参数。因此,为了能够将c-string传递给函数,我们使用c_str()
std::string
函数
您还可以将声明缩短为:
system( ("grep "+stockpile[i].datepurchased+" stockdatabase.txt").c_str());
由于+运算符会创建临时std::string
,因此您可以直接访问其c_str()
函数。
答案 1 :(得分:0)
<<
是附加到流的运算符,它不执行字符串连接。因此,请使用+
代替<<
来生成grep命令。
http://www.cplusplus.com/reference/string/string/operator+/
http://www.cplusplus.com/reference/string/string/operator%3C%3C/
答案 2 :(得分:0)
这是错误的:
df.printSchema()
您需要一个stringstream对象来首先流式传输命令的各个部分。 或者使用类似的字符串构建命令:
cout<<system("grep "<<stockpile[i].datepurchased<<" stockdatabase.txt")<<endl
答案 3 :(得分:0)
好吧,你的编译器非常明确地告诉你错误:你正在尝试使用带有两个不匹配类型的流运算符com.mysql.jdbc.exceptions.jdbc4.MySQLQueryInterruptedException: Query execution was interrupted
,即<<
(又名const char [6]
})和"grep "
(又名std::ostream
)。您根本无法流入char数组或字符串。那是STL中为流程设计的流。因此,一种可能的解决方案可能是:
stockpile[i].datepurchased
但是,没有测试过它;)