如何定位txt中某一行
怎么定位txt中某一行
比如有个a.txt内容如下
12bswdaif.xml
daifokefjlsfkja.xml
934r9043t7dsfjdf.xml
owefakdfjaksdkfjaopefjopwejfko.xml
9rw9qer8.xml
假如我想读取第三行数据 怎么实现啊
fseek是按字节定位 但是 文件名都杂乱无章的 有没有其他的方法
------解决方案--------------------
fgets循环读 读到第三行
------解决方案--------------------
仅供参考
比如有个a.txt内容如下
12bswdaif.xml
daifokefjlsfkja.xml
934r9043t7dsfjdf.xml
owefakdfjaksdkfjaopefjopwejfko.xml
9rw9qer8.xml
假如我想读取第三行数据 怎么实现啊
fseek是按字节定位 但是 文件名都杂乱无章的 有没有其他的方法
------解决方案--------------------
fgets循环读 读到第三行
------解决方案--------------------
仅供参考
- C/C++ code
#include <stdio.h> #include <string.h> #define MAXLEN 1000 char ln[MAXLEN]; FILE *f; int i,z; int b,n,L; int main(int argc,char **argv) { if (argc<2) { printf("Usage:%s fullpathfilename.ext\nget total blank/non-blank/total linenumbers.\n",argv[0]); return 1; } f=fopen(argv[1],"r"); if (NULL==f) { printf("Can not open file [%s]!\n",argv[1]); return 2; } z=0; b=0; n=0; L=0; while (1) { if (NULL==fgets(ln,MAXLEN,f)) break; L=strlen(ln); if ('\n'==ln[L-1]) { if (0==z) { for (i=0;i<L-1;i++) { if (!(' '==ln[i] || '\t'==ln[i])) break; } if (i<L-1) z=1;//当前行不是空行 } if (0==z) b++; else n++; z=0; } else { if (0==z) { for (i=0;i<L;i++) { if (!(' '==ln[i] || '\t'==ln[i])) break; } if (i<L) z=1;//当前行不是空行 } } } fclose(f); if (L>0 && '\n'!=ln[L-1]) { if (0==z) b++; else n++;//最后一行末尾无'\n'也计算 } printf("File:[%s] total blank/non-blank/total linenumbers is %d/%d/%d\n",argv[1],b,n,b+n); return 0; }
------解决方案--------------------
bool file_content(const string& file, string& content)
{
FILE* fp = fopen( file.c_str(), "rb" );
if (!fp)
return false;
// Get file length
fseek(fp, 0, SEEK_END);
int len = ftell( fp );
fseek(fp, 0, SEEK_SET);
content.resize(len);
fread(&content[0], len, 1, fp);
fclose(fp);
return true;
}
void split_lines(const string& s, vector<string>& lines)
{
if (s.empty())
return;
string line;
line.reserve(200);
const char* p = s.c_str();
for( ; *p; ++p ) {
line += *p;
if (*p == '\r') {
if ( *(p+1) == '\n' ) {
++p;
line += *p;
}
lines.push_back(line);
line = "";
} else if (*p == '\n') {
lines.push_back(line);
line = "";
}
}
if (!line.empty())
lines.push_back(line);
}
------解决方案--------------------
使用getline读3次即可到达第三行,很方便的。
------解决方案--------------------
------解决方案--------------------
要么自己写,要么利用现成的库函数。其实方式都一样的,因为文本文件本来就没结构,只能从头到尾的读。