|
在一些程序设计中,我们经常要先查询txt文本的行数,据此,才能对数组进行动态内存分配。
C语言实现
#include <stdio.h> #include <stdlib.h> //#define ABS(x) (x)> 0?(x):-(x) //宏定义求绝对值大小 //#define SWAP(a,b) {temp=(a);(a)=(b);(b)=temp;} //宏定义交换两个变量a,b
//列出这两个宏定义方便大家以后的计算调用
void main()
{
FILE *FP; if((FP=fopen("f:\\data.txt","r"))==NULL) { printf("Can not open the file!\n"); exit(0); } //打开文件出错处理 while(!feof(FP)) { mid=fgetc(FP);//从txt文本中读取一个字符赋值给mid if(mid=='\n') //如果这个字符为换行符 cap++; //记录txt数据行数 } n=cap+1; //大家可以思考下,文本行数为什么还要再+1,只要上机试试你就知道为什么了(最后一行没有换行符) printf("txt文本行数为: %ld\n",n); fclose(FP);
}
C++实现查询文本行数,适合调用文件对话框,在打开txt文件时,能记录文件的行数
具体步骤是先创建一个基于对话框的MFC应用程序(VC6.0),然后添加按钮控件(设置标题为“打开”),建立控件消息映射,在消息映射函数中添加如下代码:
void COpen_txtDlg::OnOpen()
{
CFileDialog *lpszOpenFile; //定义一个CfileDialog对象
CStdioFile file; //CStdioFile 类最适合文本文件的读写 CString filePathName; //定义CString类对象 CString result;
//生成一个打开文件对话框 lpszOpenFile = new CFileDialog (TRUE,"","",OFN_FILEMUSTEXIST |OFN_HIDEREADONLY , "文件类型(*.txt)|*.txt|所有文件(*.*)|*.*|"); if(lpszOpenFile->DoModal() == IDOK )//假如点击对话框确定按钮 { filePathName = lpszOpenFile->GetPathName();//得到打开文件的路径 SetWindowText(filePathName);//在窗口标题上显示路径 }
if(filePathName == " ") return;
// 打开出错处理
if(!file.Open(filePathName,CFile::modeRead)) { MessageBox("can not open file!"); return; } while(file.ReadString(result))//读取一行txt文本数据 { n++; }
CString hangshu; hangshu.Format("文本行数:%ld",n);//将n格式化为CString AfxMessageBox(hangshu); //弹出文本查询结果 file.Close();
}
|