如何用MFC删除TXT中多行数据
TXT文件如下您的订票信息:订单号:20111103013521出行日期:as......电话号:asd您的订票信息:订单号:20111103013522...电话号:a...
TXT文件如下
您的订票信息:
订单号:20111103013521
出行日期: as
...
...
电话号: asd
您的订票信息:
订单号:20111103013522
...
电话号: asd
您的订票信息:
...
用订单号做索引,删除一个订票信息:我的代码只能删除一行订单号,不能删除多行~
这里只能贴一部分代码
CStdioFile file;
char* pFileName="订票信息.txt";
CString str;
CStringArray strarray;
CString strLine;
CString key="订单号:"+m_TicketNum;
int nCount=strarray.GetSize();
while(file.ReadString(strLine))
{
strarray.Add(strLine);
}
file.Close();
for(int i=0; i <nCount; i++)
{
str = strarray[i];
if( str.Find(key) != -1)
{
// strarray.RemoveAt(i-1);这里报错了
strarray.RemoveAt(i);
//strarray.RemoveAt(i+1);
...
nCount--;
i--;
}
} 展开
您的订票信息:
订单号:20111103013521
出行日期: as
...
...
电话号: asd
您的订票信息:
订单号:20111103013522
...
电话号: asd
您的订票信息:
...
用订单号做索引,删除一个订票信息:我的代码只能删除一行订单号,不能删除多行~
这里只能贴一部分代码
CStdioFile file;
char* pFileName="订票信息.txt";
CString str;
CStringArray strarray;
CString strLine;
CString key="订单号:"+m_TicketNum;
int nCount=strarray.GetSize();
while(file.ReadString(strLine))
{
strarray.Add(strLine);
}
file.Close();
for(int i=0; i <nCount; i++)
{
str = strarray[i];
if( str.Find(key) != -1)
{
// strarray.RemoveAt(i-1);这里报错了
strarray.RemoveAt(i);
//strarray.RemoveAt(i+1);
...
nCount--;
i--;
}
} 展开
展开全部
思路应该是用订单号作索引,来找到想删的数据,然后删除该订单号的前一行,以及之后的若干行。
但我没看到你按这个思路来啊,if( str.Find(key) != -1) ,这个Find的结果你又没用上,直接就RemoveAt(i-1),RemoveAt(i-1)了,你应该删除RemoveAt(str.Find(key)-1)吧。
但我没看到你按这个思路来啊,if( str.Find(key) != -1) ,这个Find的结果你又没用上,直接就RemoveAt(i-1),RemoveAt(i-1)了,你应该删除RemoveAt(str.Find(key)-1)吧。
追问
嗯,我就是按照那么想的,str.Find(key)是其中一行的数据 返回的是key在这行字符串的位置,我只需要判断一下这行是不是我要找的就可以了~删除的话用CStringArray,RemoveAt(i-1)这个不行啊,现在按LS那位仁兄实现了删除后几行及本行 但是删不了上面的。。。
追答
用Find找到要删的数据的订单号是第x行,每个订票信息是y行的话,那么从x+y-2行开始往前删到x-1行,不行么?
展开全部
i 如果为0的话,i-1就为-1了,RemoveAt(-1)肯定会报错的嘛!算法不严谨,改改算法。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CStringArray删除过一个元素后,后面的元素自动前移一位的,所有如果要删除N行,需要从后面的开始删起,可通过下面方法
if(str.Find(key) != -1)
{
for(int j=N-1;j>0;j--)//N为需要删除的行数
{
strArray.RemoveAt(i+j);
}
break;//跳出循环
}
if(str.Find(key) != -1)
{
for(int j=N-1;j>0;j--)//N为需要删除的行数
{
strArray.RemoveAt(i+j);
}
break;//跳出循环
}
追问
这么改的
if(str.Find(key) != -1)
{
for(int j=6;j>0;j--)//N为需要删除的行数
{
if( (strarray.GetAt( i+j )) != "" )//判断是否空这么写好像不管用。。
strarray.RemoveAt(i+j);
}
strarray.RemoveAt(i);//这里是删本行貌似上面删不了
nCount--;
i--;
break;//跳出循环
}
大哥~要不然我给你发程序过去帮我看一下好吗真谢谢你
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
nCount--;
i--;
这里的i-- 不用了吧?
i--;
这里的i-- 不用了吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询