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 ...
随机推荐
- QT visual stuido 集成插件不能打开ui文件的解决方法(去掉xml的UTF8标记)
QT visual stuido 集成插件不能打开ui文件的解决方法 visual studio里不能打开这个ui文件,出现warning等解决方法是:于是将<?xml version=&quo ...
- QT+VS编译器处理字符串时的坑真是多
以下因素都有影响:1. QT4与QT5对字符串编码的处理不同(最好不要在源代码里直接写中文,坑更多)2. QTextCodec自动对编码转换的影响3. 源代码文件对编码存储格式的不同会影响编译器对字符 ...
- QT程序探测所需DLL,静态连接和打包
1. 如果没有使用静态编译的QT库的话,那么无论VS还是MinGW编译出来的exe程序都要带上一堆DLL,而且必须是准确版本的DLL,对于VS好像还有一个Microsoft.VC90.CRT.mani ...
- 高通/苹果/联发科:手机CPU那些事
如今人们买手机,都比较关心采用了什么CPU,因为CPU直接决定了这台手机的性能,CPU之于手机就好比人的大脑,它是整台手机的控制中枢系统,也是逻辑部分的控制中心.又相当于车的发动机,发动机越强劲,车子 ...
- [iOS]ARC和MRC下混编
1.在MRC工程中使用ARC的文件(例如AFNetworking,SDWebImage,MJRefresh等)在Build Phases里找到对应.m 在后面添加-fobjc-arc(代表这个文件使用 ...
- UML系列02之UML类图(1)
类图介绍 类图,是UML(统一建模语言)中用于描述"类"以及"类与类"之间关系的示意图.它形象的描述出了系统的结构,帮助人们理解系统.类图是在"所有的 ...
- 295. Find Median from Data Stream
题目: Median is the middle value in an ordered integer list. If the size of the list is even, there is ...
- iOS:实现MKAnnotation协议,在地图上设置大头针,点击显示具体的位置信息
如何添加大头针(地标): 通过MapView的addAnnotation方法可以添加一个大头针到地图上 通过MapView的addAnnotations方法可以添加多个大头针到地图上 –(void)a ...
- Oracle ->> Oracle下实现SQL Server的TOP + APPLY
今晚很好奇想知道Oracle下有没有APPLY子句?如果有那怎么实现SQL Server下的TOP + APPLY.结果自己写了个例子. with a as ( order by grp_factor ...
- 阿里Druid数据库连接池使用
阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好 可以监控连接以及执行的SQL的情况. 加入项目的具体步骤: 1.导入jar <parent> ...