【发布时间】:2018-08-23 16:07:17
【问题描述】:
我成功地从阅读器获取数据并将其写入文本文件。
检测到的标签示例:4330-3031-3138-3031-2D32-2D31
但是,标签数据写入文本文件是这样的:
43
4330
4330-30
4330-3031
4330-3031-31
4330-3031-3138
4330-3031-3138-30
4330-3031-3138-3031
4330-3031-3138-3031-2D
4330-3031-3138-3031-2D32
4330-3031-3138-3031-2D32-2D
4330-3031-3138-3031-2D32-2D31
我尝试使用 if 语句 (count++) 将上面最长的最后一个值写入文本文件,但不知何故,即使变量保持其值,数据也不会写入文本文件。
Below are my codes:
{
// Format Tag and print on screen
void printTagData(TAG_DATA *pTagData)
{
fstream myTextFile,myTextFile2, myTextFile3;
string fileText,fileText2;
char tagBuffer[1024] = {0,};
char* pTagReportData = tagBuffer;
int index = 0;
int count = 0;
TCHAR resultBuffer[MAX_PATH];
for(index = 0; index < pTagData->tagIDLength; index++)
{
myTextFile.open("text1.txt",ios::app);
if (0 < index && index % 2 == 0)
{
*pTagReportData++ = '-';
}
sprintf(pTagReportData, "%02X", pTagData->pTagID[index]);
while (*pTagReportData) pTagReportData++;
stringstream ss;
ss << tagBuffer;
ss >> fileText;
myTextFile << fileText << endl;
myTextFile.close();
}
_stprintf(resultBuffer, TEXT("%S"), tagBuffer);
SendDlgItemMessage(g_hDlg, IDC_INVENTORY_LIST, LB_ADDSTRING, 0, (LPARAM)resultBuffer);
SendDlgItemMessage(g_hDlg, IDC_INVENTORY_LIST, WM_VSCROLL, (WPARAM)SB_BOTTOM, 0);
}
请随时给我任何提示/指导。 我是否应该编写另一个代码来提取与“4330-3031-3138-3031-2D32-2D31”匹配的模式并写入一个新的文本文件?
【问题讨论】:
-
一个简单的解决方案是使用
ios::out。但是你需要为每个标签创建一个新的文本文件。您可以尝试的另一件事是在循环外写信给myTextFile,只需一次。 -
您的文件写入是否应该在您的
for循环中?我不确定stringstream的意义是什么?您可以将tagBuffer直接写入myTextFile -
@Susmit Agrawal 感谢您的建议。我使用 ios::app 的原因是我想继续在文本文件中添加记录而不删除以前的记录(读者将继续阅读标签通过)。我之前曾尝试过该解决方案,但不知何故数据没有写入文本文件,这让我不知道如何处理它。
-
@Alan Birtles 嗨,艾伦,我尝试了您的建议,将文件写入从循环中移出,它可以工作!非常感谢大哥!顺便说一句,我正在使用 stringstream 并尝试使用它将 char 转换为 string 然后允许我写入文本文件,但现在我已经删除它仍然有效。