本文整理汇总了C++中TString::SubStrC方法的典型用法代码示例。如果您正苦于以下问题:C++ TString::SubStrC方法的具体用法?C++ TString::SubStrC怎么用?C++ TString::SubStrC使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类TString
的用法示例。
在下文中一共展示了TString::SubStrC方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Parse
//============================================================
// <T>解析读入的一行。</T>
//
// @param pLine 读入的一行。
//============================================================
void FCsvLine::Parse(TCharC* pLine){
TStringRefer line = pLine;
TInt lineLength = line.Length();
TInt cellStart, cellEnd, pos, dummy;
cellStart = cellEnd = pos = dummy = 0;
while(pos < lineLength){
TChar cur = pLine[pos];
if(cur == '"'){
dummy++;
}else if(cur == ','){
TInt dummyTemp = dummy % 2;
if(0 == dummyTemp){
dummy = 0;
cellEnd = pos;
if(cellEnd == cellStart){
_pCells->Push("");
}else{
TString cellText = line.SubStrC(cellStart, cellEnd);
TInt cellTextLen = cellText.Length();
TString cell;
if(WrapedByRefer(cellText)){
TString tempCell = cellText.SubStrC(1, cellTextLen - 1);
SinglePairRefer(tempCell, cell);
}else{
SinglePairRefer(cellText, cell);
}
_pCells->Push(cell);
}
cellStart = cellEnd + 1;
}
}else if(cur == '\n'){
cellEnd = pos;
dummy %= 2;
MO_ASSERT(0 == dummy);
if(cellEnd == cellStart){
_pCells->Push("");
}else{
TString cellText = line.SubStrC(cellStart, cellEnd);
TInt cellTextLen = cellText.Length();
TString cell;
if(WrapedByRefer(cellText)){
TString tempCell = cellText.SubStrC(1, cellTextLen - 1);
SinglePairRefer(tempCell, cell);
}else{
SinglePairRefer(cellText, cell);
}
_pCells->Push(cell);
}
}
pos++;
}
}
示例2: Store
//============================================================
// <T>将一行保存至文件。</T>
//
// @param out 文件输出流。
//============================================================
void FCsvLine::Store(TDataOutput& out){
TString csvCell;
TString csvLine;
TInt count = _pCells->Count();
for(TInt n = 0; n < count; n++){
csvCell.Clear();
TString tempCell;
TStringRefer cell = _pCells->Get(n);
TInt cellLength = cell.Length();
// 不允许空的格
MO_ASSERT( 0 != cellLength);
// 处理双引号
TInt start = 0;
TInt index = cell.IndexOf('"');
if(ENotFound != index){
while(ENotFound != index){
index++;
tempCell.Append(cell.SubStrC(start, index));
// 不以引号开头或结尾
if(index != 1 && index != cellLength){
tempCell.Append('"');
}else{
tempCell.Append('"');
tempCell.Append('"');
}
start = index;
if(start < cellLength){
index = cell.IndexOf('"', start);
}else{
break;
}
}
// 拷贝余下内容
if(start < cellLength - 1){
tempCell.Append(cell.SubStrC(start, cell.Length()));
}
}else{
tempCell = cell;
}
// 处理逗号
TInt tempCellLen = tempCell.Length();
if(tempCell.Contains(',')){
// 不以“开头
if(tempCell[0] != '"'){
csvCell.Append('"');
}
csvCell.Append(tempCell);
// 不以“结尾
if(tempCell[tempCellLen -1] != '"'){
csvCell.Append('"');
}
}else{
csvCell = tempCell;
}
// 处理换行符
TInt csvCellLen = csvCell.Length();
TInt lfStart = 0;
TInt lfIndex = csvCell.IndexOf('\n');
if(ENotFound != lfIndex){
while(ENotFound != lfIndex){
// 拷贝换行符前面的内容
if(lfStart < lfIndex){
TString sub = csvCell.SubStrC(lfStart, lfIndex);
csvLine.Append(sub);
}
csvLine.Append('\\');
csvLine.Append('n');
// 跳过换行符
lfIndex++;
lfStart = lfIndex;
if(lfStart < csvCellLen){
lfIndex = csvCell.IndexOf('\n', lfStart);
}else{
break;
}
}
if(lfStart < csvCellLen - 1){
TString sub = csvCell.SubStrC(lfStart, csvCell.Length());
csvLine.Append(sub);
}
}else{
csvLine.Append(csvCell);
}
// 一格格式化结束
if((count - 1) == n){
csvLine.Append('\n');
}else{
csvLine.Append(',');
}
}
out.Write((TCharC*)csvLine, csvLine.Length());
}