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 ...
随机推荐
- 1.BOM学习
1.bom.html <html> <head> <title>bom演示</title> <script type="text/jav ...
- 把Message转换成String
把Message转换成String注意,这里欠缺CM消息和CN消息,因为它们不是系统消息,不经过Dispatch API转发,但是可以把它们写在WndProc里,这样SendMessage送来的消息也 ...
- Python3导入自定义模块的3种方式
前话 最近跟着廖雪峰的教程学到 模块 这一节.关于如何自定义一个模块,如果大家不懂的话还请先看下面这篇博文 ↓ http://www.liaoxuefeng.com/wiki/001431608955 ...
- ubuntu 12.10无法用apt-get安装软件 Err http://us.archive.ubuntu.com quantal-updates/main Sources 404 Not
之前执行apt-get 不管是什么软件或apt-get update都会遇到fail to fetch http://us.archive.ubuntu.com quantal-updates/ma ...
- PHP 简介
lamp LAMP - Linux Apache MySQL PHP MySQL - 三个层次:文件层次,服务层次,界面层次. LAMP-Linux Apache MySQL PHP 本机 :127. ...
- VC操作ADO的基本策略
一.ADO概述 ADO是Microsoft为最新和最强大的数据访问范例 OLE DB 而设计的,是一个便于使用的应用程序层接口.ADO 使您能够编写应用程序以通过 OLE. DB 提供者访问和操作数据 ...
- jdbc框架 commons-dbutils的使用
commons-dbutils 是 Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,学习成本极低,并且使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序 ...
- 深入理解Java内存模型(三)——顺序一致性
数据竞争与顺序一致性保证 当程序未正确同步时,就会存在数据竞争.java内存模型规范对数据竞争的定义如下: 在一个线程中写一个变量, 在另一个线程读同一个变量, 而且写和读没有通过同步来排序. 当代码 ...
- django模型中的抽象类(abstract)
首先介绍下django的模型有哪些属性:先看例子: Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性.以下对此作一总结: abstract 这个属性是定义当前的模 ...
- [转]SQL语句优化技术分析
一.操作符优化 1.IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格.但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用 ...