web-dev-qa-db-ja.com

Visual C ++コンソール出力のテキストファイルへの書き込みまたはコピー

Intel Perceptual ComputingSDK音声認識モジュールを使用しています。 SDKサンプルは、Microsoft Visual Studio 2012 Professionalを使用してディクテーションを認識し、音声入力を処理した後、コンソールウィンドウに出力します。私がやりたいのは、コンソールウィンドウに出力された出力をコピーして、.txtファイルに書き込むことだけです。私は一般的な方法に従っていますが、どういうわけかファイルに書かれているテキストはほんの数です。

// Callback for recognized commands and alerts
class MyHandler: public PXCVoiceRecognition::Recognition::Handler, public    PXCVoiceRecognition::Alert::Handler 

{public:MyHandler(std :: vector&commands){this-> commands = commands; }

virtual void PXCAPI OnRecognized(PXCVoiceRecognition::Recognition *cmd) 
{
  wprintf_s(L"\nRecognized: <%s>\n", (cmd->label>=0)?commands[cmd->label]:cmd-    >dictation); //this line prints the dictated statement//
  // writing to a text file
  printf("Writing to the txt file...");
  std::ofstream out("c:\\MyVoice.txt");
  out<<cmd->dictation;
}

protected:
std::vector<pxcCHAR*> commands;

};

int wmain(int argc, wchar_t* argv[]) {
// Create session
PXCSmartPtr<PXCSession> session;
pxcStatus sts = PXCSession_Create(&session);
if (sts < PXC_STATUS_NO_ERROR) {
wprintf_s(L"Failed to create the PXCSession\n");
return 3;
}
// Parse command line
UtilCmdLine cmdl(session);
if (!cmdl.Parse(L"-file-iuid-grammar-sdname-realtime-eos",argc, argv)) return 1;

// Create PXCVoiceRecognition instance
PXCSmartPtr<PXCVoiceRecognition> vc;
sts=session->CreateImpl(cmdl.m_iuid, PXCVoiceRecognition::CUID, (void **)&vc);
if (sts<PXC_STATUS_NO_ERROR) 
{
 wprintf_s(L"Failed to create PXCVoiceRecognition\n");
 return 3;
}

// Find and initilize capture module
UtilCaptureFile capture(session,cmdl.m_recordedFile,false);
if (cmdl.m_sdname) capture.SetFilter(cmdl.m_sdname);

 // Query PXCVoiceRecognition profile
 PXCVoiceRecognition::ProfileInfo profile;
 for (int i=0;;i++) 
 {
  sts=vc->QueryProfile(i, &profile);
  sts=capture.LocateStreams(&profile.inputs);
  return 3;
 }
if (cmdl.m_realtime >= 0) capture.SetRealtime(cmdl.m_realtime);
// Set PXCVoiceRecognition profile
if (cmdl.m_eos) profile.endOfSentence = cmdl.m_eos;
sts=vc->SetProfile(&profile);

// Grammar intialization
pxcUID grammar = 0;
if (cmdl.m_grammar.size()<0)
{
  wprintf_s(L"Dictation Mode\n");
}

vc->SetGrammar(grammar);  
// SubscribeRecognition
MyHandler handler(cmdl.m_grammar);
vc->SubscribeRecognition(80, &handler); 
vc->SubscribeAlert(&handler);

// Processing loop
PXCSmartPtr<PXCAudio> audio;
PXCSmartSPArray sps(3);
wprintf_s(L"Press any key to exit\n");

while (!_kbhit()) 
{
  sts = capture.ReadStreamAsync(audio.ReleaseRef(),sps.ReleaseRef(0));
  sts=vc->ProcessAudioAsync(audio,sps.ReleaseRef(1));
  sps.SynchronizeEx();
}

}

11
Kandarp Joshi

>を使用して、VisualStudioによって実行されるコマンドの出力をリダイレクトできます。ソリューションエクスプローラーでプロジェクトを選択し、[プロジェクト]-> [プロパティ]-> [構成プロパティ]-> [デバッグ]をクリックして、コマンド引数に追加します。次に、コマンド引数に> output.txtを入力します。アプリケーションを実行すると、ファイルは作業ディレクトリに表示されます。このディレクトリは、デフォルトでは.slnファイルと同じディレクトリです。

21
Rastaban

彼は単に実行可能ファイルを実行してファイルに送ることを提案していると思います。
C:\。exe> C:\ output.txt

リダイレクト に関するリンクは次のとおりです。

3

一般的に、コンソールウィンドウで正しく出力を生成できる場合は、> c:\result.txtのようなコマンドライン引数を使用して実行可能ファイルを実行するだけで、標準出力をファイルにリダイレクトできます(Windowsを使用していると想定しています)。 Visual-c ++タグがあるため)、コードを変更する必要はまったくありません(coutに入力したものはすべて、引数で指定されたファイルに書き込まれます)。 Visual Studio GUIを使用している場合は、プロジェクトのプロパティページでコマンドライン引数を指定できます。それ以外の場合は、コンソールウィンドウに手動でコマンドを入力するだけです。

1
neverhoodboy