check windows return character
#ifndef _FILE_CHECK_H
#define _FILE_CHECK_H
#include <string.h>
#include <vector>
const int LINEBUFF_SIZE = 1024;
const std::string TAB_REPLACE = " ";
const std::string TAB_STRING = "\t";
const std::string WINDOWS_RETURN = "\r\n";
const std::string UNIX_RETURN = "\n";
class FileCheck
{
public:
FileCheck(void);
~FileCheck(void);
bool checkFiles(const std::vector<std::string>& inFiles, std::vector<std::string>& messages);
bool modifyFiles(const std::vector<std::string>& inFiles);
void setOnlyCreateTmpFile(bool bval);
int delTempFiles();
private:
bool modifyOneFile(const std::string& inFileName);
bool checkOneFile(const std::string& inFileName, std::vector<std::string> & message);
void replaceString(const std::string & seach, const std::string& replace,std::string & inoutStr);
void trim(std::string &line);
bool checkSpaceLastCharacter(std::string &line, bool winrt);
std::string getTempFileName(const std::string fileName);
void updateFile(const std::string& inFile, const std::string& outFile);
bool m_OnlyCreateTmp;
std::vector<std::string> m_TmpFiles;
};
#endif _FILE_CHECK_H
#include "stdafx.h" //remove later
#include "FileCheck.h"
#include <time.h>
FileCheck::FileCheck(void)
: m_OnlyCreateTmp(false)
{
}
FileCheck::~FileCheck(void)
{
}
bool FileCheck::modifyFiles(const std::vector<std::string>& inFiles)
{
std::vector<std::string>::const_iterator it = inFiles.begin();
for(; it != inFiles.end(); ++it)
{
modifyOneFile(*it);
}
return true;
}
bool FileCheck::modifyOneFile(const std::string& inFileName)
{
if (inFileName.empty())
{
return false;
}
FILE * fp = NULL;
FILE * fpCopy = NULL;
fp = fopen(inFileName.c_str(), "rb");
std::string temFileName = getTempFileName(inFileName);
fpCopy = fopen(temFileName.c_str(),"wb");
if (!fp || !fpCopy)
{
return false;
}
while (!feof(fp))
{
char buffer[LINEBUFF_SIZE + 1];
memset(buffer,0,sizeof(buffer));
int linNum = 1;
if (fgets(buffer,LINEBUFF_SIZE,fp))
{
std::string line = buffer;
trim(line);
replaceString(TAB_STRING,TAB_REPLACE,line);
replaceString(WINDOWS_RETURN,UNIX_RETURN,line);
memcpy(buffer,line.c_str(),line.size());
fwrite(buffer,sizeof(char),line.size(),fpCopy);
linNum++;
}
}
if (fp)
{
fclose(fp);
}
if(fpCopy)
{
fclose(fpCopy);
}
if (!m_OnlyCreateTmp)
{
updateFile(temFileName,inFileName);
remove(temFileName.c_str());
}
else
{
m_TmpFiles.push_back(temFileName);
}
return true;
}
void FileCheck::replaceString(const std::string & seach, const std::string& replace,std::string & inoutStr)
{
if (!inoutStr.empty())
{
size_t pos = 0;
pos = inoutStr.find(seach,pos);
while (pos != std::string::npos)
{
inoutStr.replace(pos,seach.size(),replace);
pos+=seach.size();
pos = inoutStr.find(seach,pos);
}
}
}
void FileCheck::trim(std::string &line)
{
if (!line.empty())
{
size_t endPos = line.length() - 1;
while (endPos)
{
if (isspace(line[endPos]))
{
endPos --;
}
else
{
break;
}
}
if (endPos < line.length() - 1 )
{
line.replace(endPos+1,(line.length() - endPos - 2),"");
}
}
}
bool FileCheck::checkSpaceLastCharacter(std::string &line ,bool winrt)
{
bool ret = false;
if (!line.empty())
{
size_t endPos = line.length() - 1;
if (endPos)
{
endPos --;
if (winrt && endPos)
{
endPos--;
if(endPos && isspace(line[endPos]))
{
ret = true;
}
}
else if (endPos)
{
if(isspace(line[endPos]))
{
ret = true;
}
}
}
}
return ret;
}
std::string FileCheck::getTempFileName(const std::string fileName)
{
char buffer[255];
memset(buffer,0,255);
const time_t t = time(NULL);
struct tm* current_time = localtime(&t);
if (current_time)
{
sprintf_s(buffer,"%d%d%d%d%d%d",
current_time->tm_year + 1900,
current_time->tm_mon + 1,
current_time->tm_mday,
current_time->tm_hour,
current_time->tm_min,
current_time->tm_sec);
}
std::string tmpFileName;
size_t dotPos = fileName.rfind('.');
if (dotPos != std::string::npos)
{
std::string extName = fileName.substr(dotPos);
tmpFileName = fileName.substr(0,dotPos);
tmpFileName += "_template";
tmpFileName += buffer;
tmpFileName += extName;
}
return tmpFileName;
}
void FileCheck::updateFile(const std::string& inFile, const std::string& outFile)
{
if (inFile.empty() || outFile.empty())
{
return;
}
FILE * fpFrom = fopen(inFile.c_str(),"rb");
FILE * fpTo = fopen(outFile.c_str(),"wb");
if (fpFrom && fpTo)
{
fseek(fpFrom,0,SEEK_END);
long len = ftell(fpFrom);
fseek(fpFrom,0,SEEK_SET);
char *temp = new char[len];
memset(temp,0,len);
fread(temp,sizeof(char),len,fpFrom);
fwrite(temp,sizeof(char),len,fpTo);
delete [] temp;
fclose(fpFrom);
fclose(fpTo);
}
}
void FileCheck::setOnlyCreateTmpFile(bool bval)
{
m_OnlyCreateTmp = bval;
}
int FileCheck::delTempFiles()
{
int rmNum = 0;
if (m_OnlyCreateTmp && m_TmpFiles.size() > 0)
{
std::vector<std::string>::const_iterator it = m_TmpFiles.begin();
for (; it != m_TmpFiles.end(); ++it)
{
rmNum++;
remove((*it).c_str());
}
}
return rmNum;
}
bool FileCheck::checkFiles(const std::vector<std::string>& inFiles, std::vector<std::string>& messages)
{
std::vector<std::string>::const_iterator it = inFiles.begin();
for(; it != inFiles.end(); ++it)
{
checkOneFile(*it,messages);
}
return true;
}
bool FileCheck::checkOneFile(const std::string &inFileName, std::vector<std::string> & messages)
{
if (inFileName.empty())
{
return false;
}
FILE * fp = NULL;
fp = fopen(inFileName.c_str(), "rb");
if (!fp)
{
return false;
}
int linNum = 1;
while (!feof(fp))
{
char buffer[LINEBUFF_SIZE + 1];
char msgBuffer[LINEBUFF_SIZE + 1];
memset(buffer,0,sizeof(buffer));
memset(msgBuffer,0,sizeof(msgBuffer));
bool isReturn = false;
if (fgets(buffer,LINEBUFF_SIZE,fp))
{
std::string line = buffer;
std::string msg;
if (line.find(TAB_STRING,0) != std::string::npos)
{
sprintf_s(msgBuffer, sizeof(msgBuffer), "tab:%d ", linNum);
msg.append(msgBuffer);
}
if (line.find(WINDOWS_RETURN,0) != std::string::npos)
{
sprintf_s(msgBuffer, sizeof(msgBuffer), "return:%d ", linNum);
msg.append(msgBuffer);
isReturn = true;
}
if (checkSpaceLastCharacter(line,isReturn))
{
sprintf_s(msgBuffer, sizeof(msgBuffer), "space:%d ", linNum);
msg.append(msgBuffer);
}
if (!msg.empty())
{
msg.append("-->");
msg.append(inFileName);
messages.push_back(msg);
}
linNum++;
}
}
if (fp)
{
fclose(fp);
}
return true;
}
check windows return character的更多相关文章
- ABAP程序中退出操作(CHECK, EXIT, RETURN, LEAVE PROGRAM)
这里总结一下几个常用的退出操作: CHECK.(SAP官方推荐只在循环中使用) 1)CHECK 后面要跟一个表达式,当表达式值为假(false)时,CHECK发生作用,退出循环(LOOP)或处理程序 ...
- How to check Windows 7 OS is permanently activated?[Windows 7]
Press Windows + R, then you can enter : slmgr.vbs -xpr
- DB INIT IN WINDOWS (FOR 12C)
Uat oracleDB-Uat 192.168.63.121 Windows server 2012 R2 2核12G,硬盘160G 内置用户是oaadm ...
- wxpython wx.windows的API
wx.Window is the base class for all windows and represents any visible object on screen. All control ...
- [转]Installing SharePoint 2013 on Windows Server 2012 R2
转自:http://www.avivroth.com/2013/07/09/installing-sharepoint-2013-on-windows-server-2012-r2-preview/ ...
- windows环境:idea或者eclipse指定用户名操作hadoop集群
方法 在系统的环境变量或java JVM变量添加HADOOP_USER_NAME(具体值视情况而定). 比如:idea里面可以如下添加HADOOP_USER_NAME=hdfs 原理:直接看源码 /h ...
- dhcpsrv:windows系统的优秀开源免费dhcp serve软件
概述: 官方网站 :http://www.dhcpserver.de/ 写博客时的可免费下载版本 2.52, 或者在cnblogs 本地下载 --========================== ...
- Python2.7在Windows下CMD编码为65001/utf-8时print报错[Errno 0]/[Errno 2]
使用python2.7处理unicode的字符串,环境变量已设置PYTHONIOENCODING为utf-8,cmd编码为utf-8时print unicode字符串会报错[Errno 0]或[Err ...
- python2.7.6安装easy_install (windows 64 环境)
1.复制以下代码保存到easy_install.py文件中(文件名可随意命名)并将该文件放到python的安装路径中(如:D:\Python27) #!/usr/bin/env python &quo ...
随机推荐
- phpeclipse常用快捷键
phpeclipse常用快捷键
- 当前主流的安卓APP开发IDE
什么是主流的开发安卓APP的方式? 我是去年4月份接触的Android开发,因此特别有感触,可以明显的感受到安卓APP主流开发方式的改变. 去年,2015年年初,各大安卓开发群大部分大牛在用Eclip ...
- Java笔记——面向切面编程(AOP模式)
原文:http://www.cnblogs.com/yanbincn/archive/2012/06/01/2530377.html Aspect Oriented Programming 面向切面 ...
- SIM卡
SIM卡是(Subscriber Identity Module 客户识别模块)的缩写 也称为用户身份识别卡.智能卡,GSM数字移动电话机必须装上此卡方能使用.在电脑芯片上存储了数字移动电话客户的信息 ...
- iOS:授权用户定位NSLocationManager的使用
请求用户批准定位: 在iOS8,要想获得用户的位置,必须经过用户批准授权 开发者可以在Info.plist中添加两个配置项 –NSLocationAlwaysUsageDescription –NSL ...
- python流程控制语句 ifelse - 3
#! /usr/bin/python x = input ('please inut a integer:') x = int(x) : print ('你输入了一个负数') elif x == : ...
- 共有19款Java 文件上传组件开源软件
http://www.oschina.net/project/tag/139/fileupload?lang=19&sort=view
- HDU 4629 Burning 几何 + 扫描线
总体思路参考了 这里. 细节:1.控制精度,虽然这题没卡精度,不过还是要控制一下. 之前 bool operator<( const Point& A, const Point& ...
- GitHub 教程 in Ubuntu
Follow these steps to configure github if you are the first time to use Github 1. Sign up a username ...
- 每天一个小算法(Heapsort)
#include "stdio.h" #include "stdlib.h" #define Num 10 Heap(int arr[],int i,int n ...