C++转换为 C# 读取文本以生成语句
C++ conversion to C# reading text to generate statements
我有一个 c++ 程序,它读取一个带有表单馈送作为页面/文档分隔符的文本文件。
我可以根据需要扫描文本文件并捕获表单提要。目前让我感到困惑的是 if() 语句中的一个奇怪之处。
我有一个 c++ 变量定义为:
DWORD dwTotalReadStmts;
在另一堂课上,我有以下方法:
BOOL CAG_StatementParser::GetFirstStatement(CAG_Statement& Statement)
上面的 BOOL 方法有一个来自 ReadStatement(Statement) 方法的返回,该方法读取语句并对从文本文件中读取的行执行各种工作。
总的来说,我有一个 if 语句,它使用 DWORD 来计算从方法返回的布尔值。 据我了解,DWORD 是一个无符号的长整数值。
CAG_Statement Statement;
int nStmts = -1;
if (dwTotalReadStmts = Parser.GetFirstStatement(Statement))
我试图将我的大脑包裹在 if 语句的工作原理上。 当我在 C# 中尝试类似的东西时,我收到有关类型冲突的错误(无法隐式将"bool"转换为"int")。
这是我需要转换为 c# 的 c++ 代码
CAG_StatementParser Parser;
if (Parser.Open(m_DataFileName.GetFilePathName()))
{
CAG_Statement Statement;
int nStmts = -1;
if (dwTotalReadStmts = Parser.GetFirstStatement(Statement))
{
nStmts = 1;
cout << setw(6) << nStmts << "r";
/* Write first statement */
if (!WriteStatement(Statement))
{
CleanUp(); return 1;
}
/* Write subsequent statement */
while ((dwTotalReadStmts = Parser.GetNextStatement(Statement)) == 1)
{
if (Statement.m_nTotalPages == 0)
break;
if (!WriteStatement(Statement))
{
break;
}
cout << setw(6) << nStmts++ << "r";
}
/* DONE! -> clean up */
CleanUp();
}
if (nStmts == -1) {
cout << "No statement processed!" << endl;
}
else {
/* Display statistics */
ShowStats();
if (nStmts != dwTotalReadStmts) {
CString strTmp;
m_strLog += "There may exist an error when processing the input file.rn";
if (dwTotalReadStmts > 1) {
strTmp.Format("Total statements parsed does not agree with audit counts: %d vs %d!!!rn", nStmts, dwTotalReadStmts);
}
else {
strTmp.Format("Only parsed %d statements from the input file!!!rn", nStmts);
}
m_strLog += strTmp;
}
DumpLog(m_strLog);
}
}
else
{
cout << "Could not open statement file!" << endl;
}
这是我到目前为止拥有的 C# 代码的框架
StatementParser parser = new StatementParser();
FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
if (fileStream.CanRead)
{
Statement statement = new Statement();
int nStmts = -1;
if (nTotalReadStmts = StatementParser.GetFirstStatment(fileStream, out statement))
{
nStmts = 1;
Console.WriteLine(nStmts);
//write first statement
if (!WriteStatement(statement))
{
CleanUp();
return false;
}
//srite sebsequent statements
while ((nTotalReadStmts = StatementParser.GetNextStatment(fileStream, out statement)) == 1)
{
if (statement.M_nPages ==0)
{
break;
}
if(!WriteStatement(statement))
{
break;
}
Console.WriteLine(nStmts);
}
CleanUp();
}
if(nStmts == -1)
{
Console.WriteLine("No statment processed.");
}
else
{
/* Display statistics */
//ShowStats();
if(nStmts != nTotalReadStmts)
{
String strTmp = ""; ;
//write log file entry
if(nTotalReadStmts > 1)
{
strTmp += string.Format("Totals do not agree: {0} vs {1}", nStmts, nTotalReadStmts);
}
else
{
strTmp += string.Format("Parsed {0} statements from the input file", nStmts);
}
//add strTmp to log file
}
//write the logfile
}
}
else
{
Console.WriteLine("Cannot read file.");
}
在C++中,这...
if (dwTotalReadStmts = Parser.GetFirstStatement(Statement))
{
// ...
等于此:
dwTotalReadStmts = Parser.GetFirstStatement(Statement);
if (dwTotalReadStmts != 0)
{
// ...
那是因为
在 C 和 C++ 中,整数值为零是布尔值- false,非零整数值是布尔值 true。它们在这些语言中是可以互换的,但在 C# 中它们不是。
在任一语言中,赋值表达式返回分配的值:
int x = 1; int y = 2; // Now z is equal to 1 int z = (y = x);
这样做是为了过滤掉 CS101 中的弱者。
因此,它调用 GetFirstStatement(),将(无符号长)返回值分配给 dwTotalReadStmts,然后将相同的无符号长整型值解释为布尔值。
第二个版本是有效的 C#,假设Parser.GetFirstStatement(Statement)
仍然返回某种整数——尽管在 C# 中我们不会使用dw
前缀来表示DWORD
。
if-语句
if (dwTotalReadStmts = Parser.GetFirstStatement(Statement))
{
// do something
}
与
dwTotalReadStmts = Parser.GetFirstStatement(Statement);
if (dwTotalReadStmts != 0)
{
// do something
}
相关文章:
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- C++ 文本消息解码器脚本 编译器 "expects unqualified id" 之前 if 和 else 语句
- C# 读取完全锁定的文本文件或读取 if 语句外部的输出
- C++转换为 C# 读取文本以生成语句
- 从文本中抓取句子,将所有句子分别存储在某个数据结构中
- 从二进制文件中抓取文本时,为什么 xdg_vtnr=8 是我的结果
- C++如何使用文本输入和If语句打开应用程序
- 带有文本的 if 语句 c++
- C++ 中的列文本抓取
- Windows XP在C++中启动时读取文本文件的速度较慢;预取
- 基于文本的游戏非分支if语句
- 从Windows应用程序的文本框中抓取文本
- 粗体文本通过c++写语句
- c++用条件语句读取文本文件
- Switchcase语句问题.从文本文件中读取信息
- C++If语句或文本文件