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 ...
随机推荐
- 两个奇葩的C/C++问题
今天为大家介绍几个奇葩的C/C++问题. 1 大家看看下面的输出结果是什么呢? #include <stdio.h> #include <stdlib.h> void ma ...
- ios开发与安卓开源项目及库
自己总结的iOS.mac开源项目及库 https://github.com/Tim9Liu9/TimLiu-iOS 自己总结的Android开源项目及库 https://github.com/Tim9 ...
- Fragment 的用法小技巧
public static class ArrayListFragment extends ListFragment { int mNum; /** * Create a new instance o ...
- 汇编语言---call和ret指令
汇编语言--call和ret指令 call和ret指令 call和ret指令都是转移指令,它们都修改IP,或同时修改CS和IP. 它们经常被共同用来实现子程序的设计. ret和retf ret指令用栈 ...
- C#之你懂得的序列化/反序列化
前言:写此文章一方面是为了巩固对序列化的认识,另一方面是因为本人最近在面试,面试中被问到“为什么要序列化”.虽然一直在使用,自己也反复的提到序列化,可至于说为什么要序列化,还真的没想过,所以本文就这样 ...
- 280. Wiggle Sort
题目: Given an unsorted array nums, reorder it in-place such that nums[0] <= nums[1] >= nums[2] ...
- Linux命令行通配符
如果我们想对一类文件批量操作,例如批量查看硬盘文件属性,那么正常命令是如下所示: [root@localhost Desktop]# ls /dev/sda1 [root@localhost Desk ...
- NET在SQL Server中的图片存取技术
本文总结如何在.Net WinForm和.Net WebForm(asp.net)中将图片存入SQL Server中并读取显示的方法 .1.使用asp.net将图片上传并存入SQL Server中,然 ...
- PHP 练习租房
练习:租房子 <body> <form action="test.php" method="post"> <div>区域: ...
- linux系统下怎么安装.deb文件
linux系统下怎么安装.deb文件? deb 是 ubuntu .debian 的格式.rpm 是 redhat .fedora .suse 的格式. 他们不通用(虽然可以转换一下). deb是de ...