#define _CRT_SECURE_NO_WARNINGS
#include <fstream>
#include <iostream>
#include <assert.h>
#include <list>
#include <string>
#include <vector>
#include <string.h>
#include <stdlib.h>
using namespace std;
typedef unsigned char BYTE;
typedef unsigned short WORD;
typedef unsigned int DWORD;
const char* filename = "test.txt";
const char* ofname = "output.txt";
struct userInfo
{
userInfo()
{
ucType = 0;
ucNo = 0;
ucSlot = 0;
ucPort = 0;
}
userInfo(BYTE type, BYTE No, BYTE slot, BYTE port)
{
ucType = type;
ucNo = No;
ucSlot = slot;
ucPort = port;
}
BYTE ucType;
BYTE ucNo;
BYTE ucSlot;
BYTE ucPort;
vector<string> users;
};
bool isSep(const char& c, const char* sep)
{
const char* p = sep;
while (*p != '\0')
{
if (*p == c)
{
return true;
}
p++;
}
return false;
}
int SplitLine(vector<string>& Words, const string& line, const char* sep)
{
int count = 0;
bool isWhitespace = true;
int dwStart = -1;
int i = 0;
string s;
for (i=0; i < line.length();++i)
{
char c = line.at(i);
if (isSep(c, sep))
{
if (!isWhitespace)
{
if (dwStart != -1)
{
s = line.substr(dwStart, i - dwStart);
Words.push_back(s);
}
dwStart = -1;
}
isWhitespace = true;
}
else if (isWhitespace)
{
count++;
dwStart = i;
isWhitespace = false;
}
}
if (dwStart != -1 && dwStart < i)
{
s = line.substr(dwStart, i - dwStart);
Words.push_back(s);
}
return count;
}
int LoadUserInfo(vector<userInfo>& users)
{
ifstream infile;
infile.open(filename, ios::in);
assert(infile.is_open());
string s;
vector<string> vec;
int count = 0;
while (getline(infile, s))
{
vec.clear();
cout << s << endl;
count = SplitLine(vec, s, " \t\n");
if (count < 4)
{
cout << "Line error." << endl;
continue;
}
userInfo user;
user.ucType = atoi(vec.at(0).c_str());
user.ucNo = atoi(vec.at(1).c_str());
user.ucSlot = atoi(vec.at(2).c_str());
user.ucPort = atoi(vec.at(3).c_str());
if (count > 4)
{
SplitLine(user.users, vec.at(4), ",-");
}
users.push_back(user);
}
infile.close();
return 0;
}
int SaveUserInfo(vector<userInfo>& users)
{
ofstream outfile;
outfile.open(ofname);
const char* seg = "\t";
outfile << "Shelf" << seg << "Slot" << seg << "Port" << seg << "Users" << seg <<endl;
vector<userInfo>::iterator iter = users.begin();
for (; iter != users.end(); ++iter)
{
char out[20];
sprintf(out, "%d-%d", iter->ucType, iter->ucNo);
outfile << out << seg;
sprintf(out, "%d", iter->ucSlot);
outfile << out << seg << seg;
sprintf(out, "%d", iter->ucPort);
outfile << out << seg << seg;
const vector<string>& vs = iter->users;
int i = 0;
for (; i < vs.size(); ++i)
{
outfile << vs[i];
if (i != vs.size()-1)
{
outfile << ",";
}
}
outfile << endl;
}
outfile.close();
return 0;
}
int main()
{
vector<userInfo> users;
LoadUserInfo(users);
//char* line = "can't find the way to home, aha.";
//char* sep = " \t\n";
//vector<string> words;
//cout << SplitLine(words, line, sep) << endl;
SaveUserInfo(users);
getchar();
return 0;
}
分割字符串,加载文本
最新推荐文章于 2022-05-07 10:53:35 发布