C/C++在文件指定位置插入字符串或者空行
2016-07-26 04:01
537 查看
// test725.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdio.h>
int fun1()
{
//添加Req和Ans
FILE *file = fopen("E:/test.aut","r+");
if (!file)
{
return -1;
}
char *strTollId = "83";
char *strVehicleId = "82";
int iToolIdIndex = 0;
int iVehicleIdIndex = 1;
int iCount = 0;
int iCountBeforeRead = 0;
while(!feof(file))
{
char buf[500] = {0};
fgets(buf,sizeof(buf) - 1,file);
//buf[strlen(buf) - 1] = '\n';//去掉\n
//buf[strlen(buf)] = '\n';//去掉\n
if (0 == strlen(buf))
{
fclose(file);
return -1;
}
else if (1 == strlen(buf))
{
iCount += 2;
continue;
}
else if (2 < strlen(buf))
{
iCount += strlen(buf) + 1;
}
char strFoundId[3] = {0};
memcpy(strFoundId,buf + iVehicleIdIndex*3,2);
if (!strcmp(strFoundId,strVehicleId))
{
char strReq[504] = {0};
strcpy(strReq,"Req:");
//先把插入位置后面的所有字符读取到临时文件中
FILE *tempFile = tmpfile();
if (!tempFile)
{
return -1;
}
while (!feof(file))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,file);
if(!feof(file))
{
// bufTemp[strlen(bufTemp) - 1] = '\r';//去掉\n
// bufTemp[strlen(bufTemp)] = '\n';
}
else
{
//最后一个字节读出来的是F F,下面的处理是去掉中间空格
// bufTemp[strlen(bufTemp) - 2] = bufTemp[strlen(bufTemp) - 1];
// bufTemp[strlen(bufTemp) - 1] = 0;
}
fwrite(bufTemp,1,strlen(bufTemp),tempFile);
}
fseek(file,iCount - (strlen(buf) + 1),SEEK_SET);
strcat(strReq,buf);
//strcat(strReq,"\\r\\n");
fwrite(strReq,1,strlen(strReq),file);
fflush(file);
iCount += 4;
fseek(tempFile,0,SEEK_SET);
while (!feof(tempFile))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,tempFile);
if(!feof(tempFile))
{
// bufTemp[strlen(bufTemp) - 1] = '\r';//去掉\n
// bufTemp[strlen(bufTemp)] = '\n';
}
else
{
//最后一个字节读出来的是F F,下面的处理是去掉中间空格
// bufTemp[strlen(bufTemp) - 2] = bufTemp[strlen(bufTemp) - 1];
// bufTemp[strlen(bufTemp) - 1] = 0;
}
fwrite(bufTemp,1,strlen(bufTemp),file);
}
fclose(tempFile);
fflush(file);
fseek(file,iCount,SEEK_SET);
}
else if (!strcmp(strFoundId,strTollId))
{
char strAns[504] = {0};
strcpy(strAns,"Ans:");
//先把插入位置后面的所有字符读取到临时文件中
FILE *tempFile = tmpfile();
if (!tempFile)
{
return -1;
}
while (!feof(file))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,file);
if(!feof(file))
{
// bufTemp[strlen(bufTemp) - 1] = '\r';//去掉\n
// bufTemp[strlen(bufTemp)] = '\n';
}
else
{
//最后一个字节读出来的是F F,下面的处理是去掉中间空格
// bufTemp[strlen(bufTemp) - 2] = bufTemp[strlen(bufTemp) - 1];
// bufTemp[strlen(bufTemp) - 1] = 0;
}
fwrite(bufTemp,1,strlen(bufTemp),tempFile);
}
fseek(file,iCount - (strlen(buf) + 1),SEEK_SET);
strcat(strAns,buf);
//strcat(strReq,"\\r\\n");
fwrite(strAns,1,strlen(strAns),file);
fflush(file);
iCount += 4;
fseek(tempFile,0,SEEK_SET);
while (!feof(tempFile))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,tempFile);
if(!feof(tempFile))
{
// bufTemp[strlen(bufTemp) - 1] = '\r';//去掉\n
// bufTemp[strlen(bufTemp)] = '\n';
}
else
{
//最后一个字节读出来的是F F,下面的处理是去掉中间空格
// bufTemp[strlen(bufTemp) - 2] = bufTemp[strlen(bufTemp) - 1];
// bufTemp[strlen(bufTemp) - 1] = 0;
}
fwrite(bufTemp,1,strlen(bufTemp),file);
}
fclose(tempFile);
fseek(file,iCount,SEEK_SET);
}
}
fclose(file);
return 0;
}
int fun2()
{
//添加Req和Ans
FILE *file = fopen("E:/test.aut","r+");
if (!file)
{
return -1;
}
int iCount = 0;
bool iIsFirstReq = true;
while(!feof(file))
{
char buf[500] = {0};
fgets(buf,sizeof(buf) - 1,file);
if (0 == strlen(buf))
{
fclose(file);
return -1;
}
else if (1 == strlen(buf))
{
iCount += 2;
continue;
}
else if (2 < strlen(buf))
{
iCount += strlen(buf) + 1;
}
char strReq[5] = {0};
memcpy(strReq,buf,4);
if (!strcmp(strReq,"Req:"))
{
if (iIsFirstReq)
{
iIsFirstReq = false;
continue;
}
//先把插入位置后面的所有字符读取到临时文件中
FILE *tempFile = tmpfile();
if (!tempFile)
{
return -1;
}
fwrite(buf,1,strlen(buf),tempFile);
while (!feof(file))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,file);
fwrite(bufTemp,1,strlen(bufTemp),tempFile);
}
fseek(file,iCount - (strlen(buf) + 1),SEEK_SET);
//strcat(strReq,buf);
//strcat(strReq,"\\r\\n");
fwrite("\n",1,1,file);
fflush(file);
iCount += 2;
fseek(tempFile,0,SEEK_SET);
while (!feof(tempFile))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,tempFile);
fwrite(bufTemp,1,strlen(bufTemp),file);
}
fclose(tempFile);
fseek(file,iCount,SEEK_SET);
}
}
fclose(file);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
//在文件指定位置插入字符串或者空行,下面2个函数是在每行前面加上Req或者Ans,并添加空行间隔
fun1();
fun2();
return 0;
}
txt文件内容如下:
/*
87 82 83 FF 54 FF
87 83 82 FF 66 FF
87 83 82 54 FF FF
87 82 83 48 FF FF
87 83 82 87 00 FF
81 82 83 54 55 FF
85 83 82 79 FF FF
*/
//
#include "stdafx.h"
#include <iostream>
using namespace std;
#include <stdio.h>
int fun1()
{
//添加Req和Ans
FILE *file = fopen("E:/test.aut","r+");
if (!file)
{
return -1;
}
char *strTollId = "83";
char *strVehicleId = "82";
int iToolIdIndex = 0;
int iVehicleIdIndex = 1;
int iCount = 0;
int iCountBeforeRead = 0;
while(!feof(file))
{
char buf[500] = {0};
fgets(buf,sizeof(buf) - 1,file);
//buf[strlen(buf) - 1] = '\n';//去掉\n
//buf[strlen(buf)] = '\n';//去掉\n
if (0 == strlen(buf))
{
fclose(file);
return -1;
}
else if (1 == strlen(buf))
{
iCount += 2;
continue;
}
else if (2 < strlen(buf))
{
iCount += strlen(buf) + 1;
}
char strFoundId[3] = {0};
memcpy(strFoundId,buf + iVehicleIdIndex*3,2);
if (!strcmp(strFoundId,strVehicleId))
{
char strReq[504] = {0};
strcpy(strReq,"Req:");
//先把插入位置后面的所有字符读取到临时文件中
FILE *tempFile = tmpfile();
if (!tempFile)
{
return -1;
}
while (!feof(file))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,file);
if(!feof(file))
{
// bufTemp[strlen(bufTemp) - 1] = '\r';//去掉\n
// bufTemp[strlen(bufTemp)] = '\n';
}
else
{
//最后一个字节读出来的是F F,下面的处理是去掉中间空格
// bufTemp[strlen(bufTemp) - 2] = bufTemp[strlen(bufTemp) - 1];
// bufTemp[strlen(bufTemp) - 1] = 0;
}
fwrite(bufTemp,1,strlen(bufTemp),tempFile);
}
fseek(file,iCount - (strlen(buf) + 1),SEEK_SET);
strcat(strReq,buf);
//strcat(strReq,"\\r\\n");
fwrite(strReq,1,strlen(strReq),file);
fflush(file);
iCount += 4;
fseek(tempFile,0,SEEK_SET);
while (!feof(tempFile))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,tempFile);
if(!feof(tempFile))
{
// bufTemp[strlen(bufTemp) - 1] = '\r';//去掉\n
// bufTemp[strlen(bufTemp)] = '\n';
}
else
{
//最后一个字节读出来的是F F,下面的处理是去掉中间空格
// bufTemp[strlen(bufTemp) - 2] = bufTemp[strlen(bufTemp) - 1];
// bufTemp[strlen(bufTemp) - 1] = 0;
}
fwrite(bufTemp,1,strlen(bufTemp),file);
}
fclose(tempFile);
fflush(file);
fseek(file,iCount,SEEK_SET);
}
else if (!strcmp(strFoundId,strTollId))
{
char strAns[504] = {0};
strcpy(strAns,"Ans:");
//先把插入位置后面的所有字符读取到临时文件中
FILE *tempFile = tmpfile();
if (!tempFile)
{
return -1;
}
while (!feof(file))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,file);
if(!feof(file))
{
// bufTemp[strlen(bufTemp) - 1] = '\r';//去掉\n
// bufTemp[strlen(bufTemp)] = '\n';
}
else
{
//最后一个字节读出来的是F F,下面的处理是去掉中间空格
// bufTemp[strlen(bufTemp) - 2] = bufTemp[strlen(bufTemp) - 1];
// bufTemp[strlen(bufTemp) - 1] = 0;
}
fwrite(bufTemp,1,strlen(bufTemp),tempFile);
}
fseek(file,iCount - (strlen(buf) + 1),SEEK_SET);
strcat(strAns,buf);
//strcat(strReq,"\\r\\n");
fwrite(strAns,1,strlen(strAns),file);
fflush(file);
iCount += 4;
fseek(tempFile,0,SEEK_SET);
while (!feof(tempFile))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,tempFile);
if(!feof(tempFile))
{
// bufTemp[strlen(bufTemp) - 1] = '\r';//去掉\n
// bufTemp[strlen(bufTemp)] = '\n';
}
else
{
//最后一个字节读出来的是F F,下面的处理是去掉中间空格
// bufTemp[strlen(bufTemp) - 2] = bufTemp[strlen(bufTemp) - 1];
// bufTemp[strlen(bufTemp) - 1] = 0;
}
fwrite(bufTemp,1,strlen(bufTemp),file);
}
fclose(tempFile);
fseek(file,iCount,SEEK_SET);
}
}
fclose(file);
return 0;
}
int fun2()
{
//添加Req和Ans
FILE *file = fopen("E:/test.aut","r+");
if (!file)
{
return -1;
}
int iCount = 0;
bool iIsFirstReq = true;
while(!feof(file))
{
char buf[500] = {0};
fgets(buf,sizeof(buf) - 1,file);
if (0 == strlen(buf))
{
fclose(file);
return -1;
}
else if (1 == strlen(buf))
{
iCount += 2;
continue;
}
else if (2 < strlen(buf))
{
iCount += strlen(buf) + 1;
}
char strReq[5] = {0};
memcpy(strReq,buf,4);
if (!strcmp(strReq,"Req:"))
{
if (iIsFirstReq)
{
iIsFirstReq = false;
continue;
}
//先把插入位置后面的所有字符读取到临时文件中
FILE *tempFile = tmpfile();
if (!tempFile)
{
return -1;
}
fwrite(buf,1,strlen(buf),tempFile);
while (!feof(file))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,file);
fwrite(bufTemp,1,strlen(bufTemp),tempFile);
}
fseek(file,iCount - (strlen(buf) + 1),SEEK_SET);
//strcat(strReq,buf);
//strcat(strReq,"\\r\\n");
fwrite("\n",1,1,file);
fflush(file);
iCount += 2;
fseek(tempFile,0,SEEK_SET);
while (!feof(tempFile))
{
char bufTemp[500] = {0};
fgets(bufTemp,sizeof(bufTemp) - 1,tempFile);
fwrite(bufTemp,1,strlen(bufTemp),file);
}
fclose(tempFile);
fseek(file,iCount,SEEK_SET);
}
}
fclose(file);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
//在文件指定位置插入字符串或者空行,下面2个函数是在每行前面加上Req或者Ans,并添加空行间隔
fun1();
fun2();
return 0;
}
txt文件内容如下:
/*
87 82 83 FF 54 FF
87 83 82 FF 66 FF
87 83 82 54 FF FF
87 82 83 48 FF FF
87 83 82 87 00 FF
81 82 83 54 55 FF
85 83 82 79 FF FF
*/
相关文章推荐
- C++中数字与字符串之间的转换
- C++拷贝构造函数
- [leetcode] Combination Sum IV
- C++——虚继承(4)
- Codeforces 493C 暴力
- 【C语言】到底能喝几瓶汽水?
- C++——C++函数调用机制(3)
- c++计算器后续(1)
- 第一章:10道C/C++经典面试题
- C++——C++内存区域(2)
- c语言简单链表实现
- c语言链表栈实现进制转换
- C++——C和C++,面向对象三大特性,程序开发过程(1)
- Leetcode 268. Missing Number (Medium) (cpp)
- 【C语言】字符的旋转
- C++之STL(5)之 set 与 multiset
- 进阶项目1.2递归函数.公约数
- Leetcode 153. Find Minimum in Rotated Sorted Array (Medium) (cpp)
- 我的C++之路
- 有趣的C语言--缓冲区