优秀的编程知识分享平台

网站首页 > 技术文章 正文

C++ Builder 多版本实现文本文件读写,并按分隔符生成字符串列表

nanyue 2025-01-13 16:35:19 技术文章 2 ℃

先引用:

#include <vcl.h>

#include <string>

#include <fstream>

#include "SysUtils.hpp"

using namespace std;


一、C++ Builder 10.4实现

1)读文本文件的方法:

// 定义一个 TStringList 类型的对象,旨在存储字符串列表。

AnsiString fileName = dllPath + "\\" + CardIdStr.c_str() + CardIdEx + ".dat";

TStringList* meterStrList = new TStringList();

int* pTotalBuyNum = new int(0);

int* pTotalBuyGas = new int(0);

int* pResidualGas = new int(0);

try

{

if (FileExists(fileName))

{

try

{

ifstream fileStream(fileName.c_str()); // 打开指定文件,并读取文件字节流

string meterStr;

getline(fileStream, meterStr); // 读取文件中第一行字节流到meterStr字符串变量中

fileStream.close(); // 关闭文件流对象

// 在字符串分割处理中,?TSysCharSet? 可以用来指定分隔符和空白字符

TSysCharSet Separators,WhiteSpace;

Separators << ','; // 分隔符为逗号; 写入内容时用逗号分隔写入

UnicodeString uStr(meterStr.c_str()); // meterStr转换成UnicodeString

// 将uStr字符串按逗号分隔符导入字符串列表meterStrList

ExtractStrings(Separators, WhiteSpace, uStr.c_str(), meterStrList);

*pTotalBuyNum = meterStrList->Strings[0].ToInt(); // 字符串列表中第0个元素

*pTotalBuyGas = meterStrList->Strings[1].ToInt(); // 字符串列表中第1个元素

*pResidualGas = meterStrList->Strings[2].ToInt(); // 字符串列表中第2个元素

}

catch (Exception &E)

{

//MessageBoxA(NULL, AnsiString(E.Message).c_str(),

// "错误提示", MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);

}

}

}

__finally {

delete pTotalBuyNum;

delete pResidualGas;

delete pTotalTakeGas;

delete meterStrList;

}

2)写文本文件:

AnsiString fileName = dllPath + "\\" + CardIdStr.c_str() + CardIdEx + ".dat";

int* pTotalBuyNum = new int(0);

int* pTotalBuyGas = new int(0);

int* pResidualGas = new int(0);

try

{

if (FileExists(fileName))

{

try

{

ofstream fileStream(fileName.c_str(), ios::out); // 打开指定文件,并写入一行字符串

UnicodeString uStr = IntToStr(*pTotalBuyNum) + "," + IntToStr(*pTotalBuyGas) + ","

+ IntToStr(*pResidualGas); // 每个字段值用逗号分隔,并组合成一个字符串

fileStream << AnsiString(uStr.c_str()).c_str(); // 转成AnsiString按字节流写入文件中

fileStream.close(); // 关闭文件流对象

}

catch (...)

{ }

}

}

__finally {

delete pTotalBuyNum;

delete pResidualGas;

delete pTotalTakeGas;

delete meterStrList;

}

二、C++ Builder 6实现

1)读文本文件的方法:

// 定义一个 TStringList 类型的对象,旨在存储字符串列表。

AnsiString fileName = dllPath + "\\" + CardIdStr.c_str() + CardIdEx + ".dat";

TStringList* meterStrList = new TStringList();

int* pTotalBuyNum = new int(0);

int* pTotalBuyGas = new int(0);

int* pResidualGas = new int(0);

try

{

if (FileExists(fileName))

{

try

{

ifstream fileStream(fileName.c_str()); // 打开指定文件,并读取文件字节流

string meterStr;

getline(fileStream, meterStr); // 读取文件中第一行字节流到meterStr字符串变量中

fileStream.close(); // 关闭文件流对象

char* cStr = new char[meterStr.length()];

try

{

strcpy(cStr, meterStr.c_str()); // 字符串复制

// 在字符串分割处理中,?TSysCharSet? 可以用来指定分隔符和空白字符

TSysCharSet Separators,WhiteSpace;

Separators << ','; // 分隔符为逗号; 写入内容时用逗号分隔写入

// 将cStr字符串按逗号分隔符导入字符串列表meterStrList

ExtractStrings(Separators, WhiteSpace, cStr, meterStrList);

}

__finally

{

delete[] cStr;

}

*pTotalBuyNum = meterStrList->Strings[0].ToInt(); // 字符串列表中第0个元素

*pTotalBuyGas = meterStrList->Strings[1].ToInt(); // 字符串列表中第1个元素

*pResidualGas = meterStrList->Strings[2].ToInt(); // 字符串列表中第2个元素

}

catch (Exception &E)

{

//MessageBoxA(NULL, AnsiString(E.Message).c_str(),

// "错误提示", MB_OK | MB_ICONERROR | MB_SYSTEMMODAL);

}

}

}

__finally {

delete pTotalBuyNum;

delete pResidualGas;

delete pTotalTakeGas;

delete meterStrList;

}

2)写文本文件:

AnsiString fileName = dllPath + "\\" + CardIdStr.c_str() + CardIdEx + ".dat";

int* pTotalBuyNum = new int(0);

int* pTotalBuyGas = new int(0);

int* pResidualGas = new int(0);

try

{

if (FileExists(fileName))

{

try

{

ofstream fileStream(fileName.c_str(), ios::out); // 打开指定文件,并写入一行字符串

AnsiString aStr = IntToStr(*pTotalBuyNum) + "," + IntToStr(*pTotalBuyGas) + ","

+ IntToStr(*pResidualGas); // 每个字段值用逗号分隔,并组合成一个字符串

fileStream << aStr.c_str(); // 按字节流写入文件中

fileStream.close(); // 关闭文件流对象

}

catch (...)

{ }

}

}

__finally {

delete pTotalBuyNum;

delete pResidualGas;

delete pTotalTakeGas;

delete meterStrList;

}

Tags:

最近发表
标签列表