use yahoo_finance::{history, Interval, Timestamped};
#[tokio::main]
async fn main() {
let data = history::retrieve_interval("AAPL", Interval::_6mo).await.unwrap();
for end in &data {
println!("Close ${:.2}, {}", end.close,end.datetime().format("%b %e %y)"));
}
}基本上,我想使用这个程序,并将输出作为.csv文件,而不是println!(),我只使用了println!以确保程序能正常工作。我对Rust和一般的编程还是相当陌生的(如果我听起来没受过教育,很抱歉)。我只是把这个程序作为一个实用的东西来使用(在金融行业工作),并在此基础上继续发展。
发布于 2021-02-24 03:32:44
您可以通过使用writeln!宏而不是println!来执行此操作。您需要一些实现Write特征的东西,例如File。这需要作为第一个参数传递给writeln!。
然后,您的示例将像这样编写:
use yahoo_finance::{history, Interval, Timestamped};
#[tokio::main]
async fn main() {
let data = history::retrieve_interval("AAPL", Interval::_6mo).await.unwrap();
// create a file called data.csv, overwriting the file if it already existed
let mut file = std::fs::File::create("data.csv");
for end in &data {
// write to the file instead of standard output
writeln!(file, "Close ${:.2}, {}", end.close,end.datetime().format("%b %e %y"));
}
}我删除了日期格式中的括号,我想是不是弄错了?无论如何,我希望我能帮上忙。
正如其他人所指出的,这不是最干净的解决方案,您可能必须注意引用自己的东西等等,因此研究使用CSV库也可能是一个好主意。但在这种情况下,我认为它应该像这样工作得很好。
发布于 2021-02-23 13:17:46
有一个std::fs::File应用程序接口可以让你创建文件。在这些文件中,有一个可以传入String的write函数。有一个format!宏,它允许您执行与println!相同的操作,但它返回一个String。因此,如果您将这一切拼凑在一起,您应该能够创建一个名称以.csv结尾的文件,然后像对println!所做的那样,使用API在for循环中向其写入内容。
不过,可能更合适的方法是查找一个可以为您提供更多csv特定功能的csv机箱。快速搜索一下,就找到了this library。
https://stackoverflow.com/questions/66327286
复制相似问题