处理txt文本,结果有问题

亚洲来客 2011-04-12 01:06:56
步骤1,打开一个txt文件
2读取每一行
3删除该行‘[’或者‘/’后的字符
4将得到保存到新的文件
我的代码是

string s,str;
ifstream ifs("p001.txt");
ofstream ofs("parameter.txt");
int found1,found2;
while(getline(ifs,str))
{
found1=s.find("[");
found2=s.find("/");
//if(found1!=string::npos&&found2!=string::npos)
if(s.length()>found1&&found1!=string::npos)
{s.erase(found1);str+="\n";str+=s;}
continue;
if (s.length()>found2&&found2!=string::npos)
{s.erase(found2-1);str+="\n";str+=s;}
continue;

}

问题1 .得到文件打开只有几行(应该有上百行)
2 .每个字符之间有空格,原文本没有空格。

求各位大虾给点解答
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
演地 2011-04-12
  • 打赏
  • 举报
回复

#include "StdAfx.h"
#include <string>
#include <iostream>
#include <fstream>
#include <complex>

using namespace std;


int main()
{
string s,str;
ifstream ifs("c:\\p001.txt");
ofstream ofs("c:\\parameter.txt");
int found1,found2;
while(getline(ifs,str))
{
found1=str.find("[");
found2=str.find("/");
if(found1 >-1 && found2 >-1)
{
if(found1 < found2)
s+=str.substr(0, found1) + '\n';
else
s+=str.substr(0, found2) + '\n';
}
else if(found1 >-1 && found2 == -1)
{
s+=str.substr(0, found1) + '\n';
}
else if(found1 == -1 && found2 > -1)
{
s+=str.substr(0, found2) + '\n';
}
else
{
continue;
}
}
cout << s << endl;
return 0;
}
//输出结果是
3060 Output voltage
3070 Output current
3080 Output frequency
Drive output power. UNI
9406 Torque ref
9405 Norm Speed
3210 Speed ref
3200 Ramp ref
162 Enable SM mon N
163 Start SM mon N
164 FastStop SM mon N

//疑问?
//3090 Output power R 0.00 0.00 0.00 PV V-F-S-B 这行没有"["或"/"
//Drive output power. UNIT: [kW] for AVy ... AC/AC4, [kVA] for AVy ... BR/BR4. 里面有"["

亚洲来客 2011-04-12
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 zhao4zhong1 的回复:]
3090那行power 后面没[
162~164这三行mon后面/前面的N咋没了?
[/Quote]
我要的结果就是/后面的都删除啊
赵4老师 2011-04-12
  • 打赏
  • 举报
回复
3090那行power 后面没[
162~164这三行mon后面/前面的N咋没了?
赵4老师 2011-04-12
  • 打赏
  • 举报
回复
推荐使用WinHex软件查看文件实际字节内容。
亚洲来客 2011-04-12
  • 打赏
  • 举报
回复
上面是我的文本内容,以及我要实现的目标
亚洲来客 2011-04-12
  • 打赏
  • 举报
回复
3060 Output voltage [V] R 0.00 0.00 0.00 PV V-F-S-B
Voltage on the drive output terminals
3070 Output current [A] R 0.00 0.00 0.00 PV V-F-S-B
Current on the drive output terminals
3080 Output frequency [Hz] R 0.00 0.00 0.00 PV V-F-S-B
Drive output frequency
3090 Output power R 0.00 0.00 0.00 PV V-F-S-B
Drive output power. UNIT: [kW] for AVy ... AC/AC4, [kVA] for AVy ... BR/BR4.
9406 Torque ref [Nm] R 0.00 0.00 0.00 PV F-S-B
Drive torque reference
9405 Norm Speed [rpm] R 0.00 0.00 0.00 PV V-F-S-B
Speed of the motor
3210 Speed ref [rpm] R 0.00 0.00 0.00 PV V-F-S-B
Drive speed reference
3200 Ramp ref [rpm] R 0.00 0.00 0.00 PV V-F-S-B
Drive ramp reference
162 Enable SM mon N/A R 0 0 1 DV V-F-S-B
It shows the drive Enable state
163 Start SM mon N/A R 0 0 1 DV V-F-S-B
It shows the drive Start state
0 OFF
1 ON
164 FastStop SM mon N/A R 0 0 1 DV V-F-S-B
It shows the drive FastStop state


我要得到的文本是
3060 Output voltage
3070 Output current
3080 Output frequency
3090 Output power
9406 Torque ref
9405 Norm Speed
3210 Speed ref
3200 Ramp ref
162 Enable SM mon
163 Start SM mon
164 FastStop SM mon
pathuang68 2011-04-12
  • 打赏
  • 举报
回复
单步调试。
亚洲来客 2011-04-12
  • 打赏
  • 举报
回复
我的记事本选择了 ‘自动换行’,所以每一行长度是有限制的

xiaohuh421 2011-04-12
  • 打赏
  • 举报
回复
首先你要确定你说的几百行,是在哪里看的? 文件读取一行是以 换行符为标记的.如果在记事本中看,并且选了自动换行的,那你看到的行数并不是实际行数.

每个字符间有空格.这个你看看是不是因为你存放的是unicode,然后以ascii读取的. 你看内存中是0x20隔开还是0x00.如果是0x20的话就真的是空格,那你就得用UltraEdit看看原文本中到底是些什么数据.

以上都没有问,那你就只有下断,看看读取出来是什么,一次读取了多少字节,这些字节是些什么内容,和原文本内容有什么区别.
bdmh 2011-04-12
  • 打赏
  • 举报
回复
为什么只有几行,你自己调试还看不到吗,看看为什么退出循环呢

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧