C++读取文本文件中以TAB作为分隔符,且中间字段有为空的情况的方法?

数据文件:testData.txt

内容:

111     222             444     555

思路:

getline()将testData.txt中的第一行记录读入到一个string中,然后搜索第n个分隔符进行定位,判断第n个字段长度,使用substr,截取该字段,并赋值给目标string。

程序:

#include <iostream>
#include <fstream>
using namespace std;
void GetStringFromCSV(std::string line, int nIdx, std::string &str)
{
	int nSPos = 0;				//记录开始位置
	for(int i = 0; i < nIdx - 1; ++i)
	{
		nSPos = line.find('\t', nSPos); //从nSPos开始寻找下一个TAB
		++nSPos;			//从当前查找的'\t'键位置下一个字符,开始查找
	}

	int nEPos = line.find('\t', nSPos);	//查找第三个字段的结束位置
	if(nEPos != string::npos)		//找到TAB字符的
	{
		str = line.substr(nSPos, nEPos - nSPos);
	}
	else
	{
		str = line.substr(nSPos, line.size() - 1 - nSPos);
	}
}
int main(void)
{
	string sTarget, line;
	ifstream in("./testData.txt");
	if(!in.is_open())
	{
		cout << "open ./testData.txt fail!" << endl;
		return -1;
	}
	getline(in, line);
	GetStringFromCSV(line, 3, sTarget);
	cout << "./testData.txt 第一行记录中以tab键分隔的第三个字段的内容为:" << sTarget << endl;
	in.close();
	return 0;
}

ps:只需修改一下‘\t‘,就可以适用用其他分隔符分隔的文件。

时间: 2024-08-23 23:49:28

C++读取文本文件中以TAB作为分隔符,且中间字段有为空的情况的方法?的相关文章

读取文本文件中指定的几列

今天在论坛上看到一个问题,这个问题大概是这样的,读取文本文件中指定的几列,并存储入数据库中. Insus.NET花上些少时间,实现读取文本的功能部分.创建一个文本文件,文本添加好几行.每一行有好几列,列与列之间使用逗号分隔. adf,adfadf,adsfgads,qwer,wrt,wrey,asdfs,qwer,tryerqert6uy7,468u4,578,qewrqew,qwertwet,67u46,45676,45qer87,47857,et356y,etyedgh adsadf,adf

java基础-输入流-读取文本文件中数据至字符串数组

简介:如题 import java.io.FileInputStream; /** * @author czchina * */ public class TestStream { public static void main(String[] args) { // TODO Auto-generated method stub //声明输入流的引用 FileInputStream fls = null; //声明输出流的引用 FileOutputStream fos =null; try{

读取文本文件中某一行

#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <windows.h> #define MAX 256 int main(void) {     FILE *fa;     int i,count=0;     char ch[MAX],file[MAX]="1.txt";     if ((fa=f

JQuery中根据属性或属性值获得元素(6种情况获取方法)

根据属性获得元素 1.比如要获取页面p标签中属性有id的元素 $("p[id]").css("color","red"); 根据属性值获得元素 1.$.在jQuery 中$("<span>"),这个语法等同于$(document.createElement("span")) ,这是一种用法,在选择元素的时候还会这样子的用:[attribute$=value],匹配给定的属性是以某些值结尾的元素.

QT初体验1:如何学习QT之个人浅见,以及如何读取文本文件,在调试信息中输出。

2017年11月初,随着工作岗位的调动,我转到了研发岗,开始了漫漫程序员的成长之路.首先介绍下个人知识储备,大一学习过C语言,没有工程经验,所学是为了期末考试+2级考试,考完在大学+硕士期间没有用到编程. 来到新的工作岗位,心情是既激动又忐忑的,作为一名青铜段位程序员,我得好好规划下学习.成长的路径. 我选择的方法是,跟着项目走,工作中不可能给你大把时光来造作,去把厚厚的C++ Primer or C++ Primer Plus给通读一遍.带着任务去学习,学的最快.具体而言,我的学习思路是: 1

python读取文本文件数据

本文要点刚要: (一)读文本文件格式的数据函数:read_csv,read_table 1.读不同分隔符的文本文件,用参数sep 2.读无字段名(表头)的文本文件 ,用参数names 3.为文本文件制定索引,用index_col 4.跳行读取文本文件,用skiprows 5.数据太大时需要逐块读取文本数据用chunksize进行分块. (二)将数据写成文本文件格式函数:to_csv 范例如下: (一)读取文本文件格式的数据集 1.read_csv和read_table的区别:  #read_cs

c++读取文本文件

#include<iostream> #include<fstream> using namespace std; int main() { int a,b=-100000,c; cin>>c; int i; ifstream infile("f1.dat",ios::in); for(i=0;i<c;i++) { infile>>a; if(a>b) b=a; } cout<<"max number:

几个数据库的小案例(一):将文本文件中的信息导入数据库的表中

从文本文件添加到数据库用户表的记录(有两个文件:frmMain.cs  SqlHelper.cs  ) //FrmMain.cs//作者:Meusing System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Fo

node读取文本文件时,去掉BOM

BOM: Byte Order MarkUTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行, BOM的移除 BOM用于标记一个文本文件使用Unicode编码,其本身是一个Unicode字符("\uFEFF"),位于文本文件头部.在不同的Unicode编码下,BOM字符对