VisualStudioで、実行画面をテキストで保存する方法
VisualStudioで、実行画面をテキストで保存する方法
Visual Studio2010を使って、C++のプログラムを作成しています。
coutで値を出力しているのですが、これを簡単に自動的にテキストに掃き出すようにできないでしょうか。
ofstreamを使えばできますが、毎回coutしているところにofstreamをやるのは非常に面倒なので、簡単に、コマンドプロンプトに表示されたものを全てテキストに保存できる方法があれば教えていただきたいです。
よろしくお願いします。
coutで値を出力しているのですが、これを簡単に自動的にテキストに掃き出すようにできないでしょうか。
ofstreamを使えばできますが、毎回coutしているところにofstreamをやるのは非常に面倒なので、簡単に、コマンドプロンプトに表示されたものを全てテキストに保存できる方法があれば教えていただきたいです。
よろしくお願いします。
Re: VisualStudioで、実行画面をテキストで保存する方法
printfやscanf、std::coutなどの入出力先をファイルに変更する
http://www.programming-magic.com/20100916205128/
http://www.programming-magic.com/20100916205128/
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: VisualStudioで、実行画面をテキストで保存する方法
リダイレクトすれば保存できます。
hozon.txtに保存するとして
コマンドプロンプトなら
実行ファイル名 > hozon.txt
Visual Studio上からなら、
プロジェクトのプロパティ → デバッグ → コマンド引数に > hozon.txt と入力。
hozon.txtに保存するとして
コマンドプロンプトなら
実行ファイル名 > hozon.txt
Visual Studio上からなら、
プロジェクトのプロパティ → デバッグ → コマンド引数に > hozon.txt と入力。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: VisualStudioで、実行画面をテキストで保存する方法
h2so5 さん、ありがとうございます。このような方法もあるのですね。
softyaさん、このような方法を探していました。ただ、画面上にも表示して、かつtxtにも保存したいのです。
これだと、画面上には何も表示されませんでした。
何か方法はあるでしょうか。よろしくお願い致します。
softyaさん、このような方法を探していました。ただ、画面上にも表示して、かつtxtにも保存したいのです。
これだと、画面上には何も表示されませんでした。
何か方法はあるでしょうか。よろしくお願い致します。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: VisualStudioで、実行画面をテキストで保存する方法
Linuxならteeコマンドをパイプすれば出来ますがWindowsは標準ではないようです。
「Windowsでteeを使いたくて: MSLabo: MCP取得や実務用に自宅でWindowsサーバを検証・自習してます&たまに日記」
http://mslabo.blog45.fc2.com/blog-entry-234.html
system32にコピーするのはオススメしません。何処かにフォルダを作って環境パスを通してください。
「Windowsでteeを使いたくて: MSLabo: MCP取得や実務用に自宅でWindowsサーバを検証・自習してます&たまに日記」
http://mslabo.blog45.fc2.com/blog-entry-234.html
system32にコピーするのはオススメしません。何処かにフォルダを作って環境パスを通してください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: VisualStudioで、実行画面をテキストで保存する方法
Re: VisualStudioで、実行画面をテキストで保存する方法
>softyaさん
ありがとうございます。teeコマンドをコマンド引数に指定してみると、確かに両方に表示されましたが、リアルタイムで表示されなく、プログラムの実行が終わってやっと表示してくれるという風になりました。リアルタイムに表示して貰わないと困るのですが、、、何かいい方法がありますでしょうか。
>涼雅さん
すみません。バッチについての知識を持っていないのですが、これを使えばVisualStudioでプログラムを実行するだけで、コマンドプロンプトとファイルの両方に出力してくれるのでしょうか。
ありがとうございます。teeコマンドをコマンド引数に指定してみると、確かに両方に表示されましたが、リアルタイムで表示されなく、プログラムの実行が終わってやっと表示してくれるという風になりました。リアルタイムに表示して貰わないと困るのですが、、、何かいい方法がありますでしょうか。
>涼雅さん
すみません。バッチについての知識を持っていないのですが、これを使えばVisualStudioでプログラムを実行するだけで、コマンドプロンプトとファイルの両方に出力してくれるのでしょうか。
Re: VisualStudioで、実行画面をテキストで保存する方法
>これを使えばVisualStudioでプログラムを実行するだけで、コマンドプロンプトとファイルの両方に出力してくれるのでしょうか。
それは無理ですが、
[codetxt]
Debug/~.exe > out.txt
Debug/~.exe
[/code]
もしくは
[codetxt]
Release/~.exe > out.txt
Release/~.exe
[/code]
として、slnファイルのある場所に保存すれば、
ファイルとコンソール両方に出力されるかと思います。
但し、これは一度~.exeを実行したあとにもう一度~.exeを起動するものなので、
リアルタイムというのはできませんし、
cinなどでの入力が必要なプログラムであれば2度入力をしなければなりません。
それは無理ですが、
[codetxt]
Debug/~.exe > out.txt
Debug/~.exe
[/code]
もしくは
[codetxt]
Release/~.exe > out.txt
Release/~.exe
[/code]
として、slnファイルのある場所に保存すれば、
ファイルとコンソール両方に出力されるかと思います。
但し、これは一度~.exeを実行したあとにもう一度~.exeを起動するものなので、
リアルタイムというのはできませんし、
cinなどでの入力が必要なプログラムであれば2度入力をしなければなりません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: VisualStudioで、実行画面をテキストで保存する方法
コマンドラインの仕組みなので、それは出来ないです。ghffmj さんが書きました:>softyaさん
ありがとうございます。teeコマンドをコマンド引数に指定してみると、確かに両方に表示されましたが、リアルタイムで表示されなく、プログラムの実行が終わってやっと表示してくれるという風になりました。リアルタイムに表示して貰わないと困るのですが、、、何かいい方法がありますでしょうか。
やはり、プログラムから同時にファイル出力をするしか無いと思います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: VisualStudioで、実行画面をテキストで保存する方法
UNIX環境でしか動かないようなのであんまり意味ないですが、
以下のようなスクリプトでリアルタイムでコンソールへの表示とファイルへの書き込みができました。
以下のようなスクリプトでリアルタイムでコンソールへの表示とファイルへの書き込みができました。
# tee.rb
require "open3"
STDOUT.sync = true
command = ARGV[0]
logfile = ARGV[1]
File.open(logfile, "w") do |f|
Open3.popen3(command) do |stdin, stdout, stderr, wait_thr|
Thread.new {
while out = stdout.gets
puts out
f.write out
end
}.join
end
end
$ ruby tee.rb "ping -c5 h2so5.net" log.txt
PING h2so5.net (219.94.244.34): 56 data bytes
64 bytes from 219.94.244.34: icmp_seq=0 ttl=53 time=70.489 ms
64 bytes from 219.94.244.34: icmp_seq=1 ttl=53 time=72.699 ms
64 bytes from 219.94.244.34: icmp_seq=2 ttl=53 time=69.637 ms
64 bytes from 219.94.244.34: icmp_seq=3 ttl=53 time=72.253 ms
64 bytes from 219.94.244.34: icmp_seq=4 ttl=53 time=72.961 ms
--- h2so5.net ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 69.637/71.608/72.961/1.309 ms
$ cat log.txt
PING h2so5.net (219.94.244.34): 56 data bytes
64 bytes from 219.94.244.34: icmp_seq=0 ttl=53 time=70.489 ms
64 bytes from 219.94.244.34: icmp_seq=1 ttl=53 time=72.699 ms
64 bytes from 219.94.244.34: icmp_seq=2 ttl=53 time=69.637 ms
64 bytes from 219.94.244.34: icmp_seq=3 ttl=53 time=72.253 ms
64 bytes from 219.94.244.34: icmp_seq=4 ttl=53 time=72.961 ms
--- h2so5.net ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 69.637/71.608/72.961/1.309 ms
Re: VisualStudioで、実行画面をテキストで保存する方法
cmd.exeはパイプをマルチプロセスで実行するのですが……。softya(ソフト屋) さんが書きました:コマンドラインの仕組みなので、それは出来ないです。ghffmj さんが書きました:>ありがとうございます。teeコマンドをコマンド引数に指定してみると、確かに両方に表示されましたが、リアルタイムで表示されなく、プログラムの実行が終わってやっと表示してくれるという風になりました。リアルタイムに表示して貰わないと困るのですが、、、何かいい方法がありますでしょうか。
出力部分をofstreamとcoutの両方に出力するようなostream-likeなオブジェクトに置き換えてしまう,というのが,簡単な解法かもしれません。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 13年前
- 住所: 東海地方
- 連絡を取る:
Re: VisualStudioで、実行画面をテキストで保存する方法
>cmd.exeはパイプをマルチプロセスで実行するのですが……。
失礼しました。command.com的な発想が抜け切れていないようです。
失礼しました。command.com的な発想が抜け切れていないようです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: VisualStudioで、実行画面をテキストで保存する方法
試しに次のようなクラス Tee を作ってみました。YuO さんが書きました:出力部分をofstreamとcoutの両方に出力するようなostream-likeなオブジェクトに置き換えてしまう,というのが,簡単な解法かもしれません。
// --- tee.h ---
#ifndef TEE_H
#define TEE_H
#include <iostream>
#include <fstream>
#include <string>
class Tee {
std::ofstream ofs;
public:
Tee();
Tee& operator<<(const char *);
Tee& operator<<(char);
Tee& operator<<(int);
Tee& operator<<(double);
Tee& operator<<(std::string&);
Tee& operator<<(std::ostream& (*)(std::ostream&));
Tee& operator<<(std::ios_base& (*)(std::ios_base&));
};
namespace std {
extern Tee tout;
}
#endif // TEE_H
// --- tee.cpp ---
#include "tee.h"
Tee::Tee() { ofs.open("log.txt"); }
Tee& Tee::operator<<(const char *s)
{ std::cout << s; ofs << s; return *this; }
Tee& Tee::operator<<(char c)
{ std::cout << c; ofs << c; return *this; }
Tee& Tee::operator<<(int i)
{ std::cout << i; ofs << i; return *this; }
Tee& Tee::operator<<(double d)
{ std::cout << d; ofs << d; return *this; }
Tee& Tee::operator<<(std::string& s)
{ std::cout << s; ofs << s; return *this; }
Tee& Tee::operator<<(std::ostream& (*f)(std::ostream&))
{ std::cout << f; ofs << f; return *this; }
Tee& Tee::operator<<(std::ios_base& (*f)(std::ios_base&))
{ std::cout << f; ofs << f; return *this; }
namespace std {
Tee tout;
}
#include "tee.h" と #define cout tout を追加します。
#include <iostream>
#include "tee.h"
#define cout tout
int main()
{
std::string hello = "hello";
std::cout << 3.14 << ' ' << std::hex << 127 << std::endl;
std::cout << hello << ", world\n";
}
ことに改善の余地があるように思います。
Re: VisualStudioで、実行画面をテキストで保存する方法
拙作のDOS process LOG writerはいかがでしょう?softyaさん、このような方法を探していました。ただ、画面上にも表示して、かつtxtにも保存したいのです。
以下のページでダウンロードに行ってください。
2005/1/24以降、更新が途絶えていますが、まだ使えます(Win7のDOS窓でも動作確認済み)。
ヘニックスの部屋
ま、tee.vbs作ってる人もいるし
参考にされて見るといいかも。
コマンドプロンプトの出力を、ファイルに保存する - ふにゃるん
written by へにっくす