⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 getdatadlg.cpp

📁 一个检索单个汉字、多个汉字和词组
💻 CPP
字号:
// GetDataDlg.cpp : implementation file
//

#include "stdafx.h"
#include "TestCorpus.h"
#include "GetDataDlg.h"
#include "math.h"
#include "stdlib.h"

#include "io.h"          // 包含 _findfirst(), _findnext()函数原型
#include "direct.h"      // 包含 _chdir()函数原型
#include "errno.h"       // 包含系统变量errno

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CGetDataDlg dialog

CGetDataDlg::CGetDataDlg(const char * Prompt, CWnd* pParent /*=NULL*/)
	: CDialog(CGetDataDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CGetDataDlg)
	m_Input_Data = _T("");
	//}}AFX_DATA_INIT
	PromptStr = Prompt;
}


void CGetDataDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CGetDataDlg)
	DDX_Text(pDX, IDC_INPUT_DATA, m_Input_Data);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CGetDataDlg, CDialog)
	//{{AFX_MSG_MAP(CGetDataDlg)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CGetDataDlg message handlers

BOOL CGetDataDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	SetWindowText(PromptStr);  // 初始化函数将提示信息设置为对话框标题
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}



BOOL GetData(const char * Prompt, CString & Data)
{ // input a string
	CGetDataDlg dlg(Prompt);  // call dlg class function
	if(dlg.DoModal()!= IDOK) return FALSE; // if user select CANCEL
	Data=dlg.m_Input_Data; // 给形参赋值
	return TRUE;
}

BOOL GetData(const char * Prompt, int & Data)
{ // input an int
	CGetDataDlg dlg(Prompt);  // call dlg function
	if(dlg.DoModal()!= IDOK) return FALSE; // if user select CANCEL
	dlg.m_Input_Data.TrimLeft();
	dlg.m_Input_Data.TrimRight();
	Data=atoi((const char *)(dlg.m_Input_Data)); // 转换为整数
	return TRUE;
}

BOOL GetData(const char * Prompt, double & Data)
{ // input a real number
	CGetDataDlg dlg(Prompt);  // call dlg function
	if(dlg.DoModal()!= IDOK) return FALSE; // if user select CANCEL
	dlg.m_Input_Data.TrimLeft();
	dlg.m_Input_Data.TrimRight();
	Data=atof((const char *)(dlg.m_Input_Data)); // 转换为实数
	return TRUE;
}

CString ChangeFileName(CString sourceName, CString newAffix) 
{// 在原文件名后加任意字符产生新文件名,文件后缀名为txt
	int i=sourceName.ReverseFind('.'); // 从后向前搜索圆点
	int j=sourceName.ReverseFind('\\'); // 从后向前搜索反斜杠
	if (i>j) return sourceName.Left(i)+newAffix+".txt";
	else return sourceName+newAffix+".txt";
}

CString ChangeExt(CString oldName,CString newExt)
{// 将原文件名后缀改为新的后缀名
	int i=oldName.ReverseFind('.');
	int j=oldName.ReverseFind('\\');
	if(i>j)
		return oldName.Left(i+1)+newExt;
	else
		return oldName+"."+newExt;
}

int charType (unsigned char *s)
{
	if (* s<128) return 0;
	else if (* s >= 176) return 1;
	else return 2;
}


int ProcessFiles (void (* ProcessAFile)(CString fileName))
{
	CString FileName;
	if(!GetData("输入文件名(可包含通配符):",FileName)) {
		AfxMessageBox("您没有输入文件名!");
		return 0;
	}
	int i=FileName.ReverseFind('\\'); // 是否包含路径名
	if(i>0) {  // 如果包含路径名
		if(_chdir((const char *)(FileName.Left(i)))!=0 ) { // 如果不能进入该目录
			AfxMessageBox("路径名错误!");
			return 0;
		}
		FileName = FileName.Mid(i+1); // 去掉路径名
	}

	_finddata_t info;  // 存放匹配文件信息的结构变量
	long handle = _findfirst(FileName.GetBuffer(FileName.GetLength()),&info);
	if(errno == ENOENT) {
		AfxMessageBox("没有找到匹配的文件!");
		return 0;
	}
	else if (errno == EINVAL) {
		AfxMessageBox("非法文件名!");
		return 0;
	}

	int fileCount = 0;
	do {
		ProcessAFile (info.name);
		fileCount ++;
	} while (_findnext(handle, &info) == 0);
	
	errno = 0;
	
	AfxMessageBox("全部文件处理完毕!");
	return fileCount;  // 返回文件个数
}

int ProcessFiles(char *Ext, char * Name, void(* ProcessAFile)(CString fileName))
{
	CFileDialog dlg(TRUE, Ext, Name, OFN_ALLOWMULTISELECT);

	CString strFileNames; // 分配一片空间存放文件名,可以选取多个文件

	dlg.m_ofn.lpstrFile = strFileNames.GetBuffer(2048);
	dlg.m_ofn.nMaxFile = 2048;

	if(dlg.DoModal()!=IDOK) {
		AfxMessageBox("您没有选取任何文件!");
		return 0;
	}
	
	strFileNames.ReleaseBuffer();
	
	int fileCount = 0;
	CString FileName;
	POSITION pos = dlg.GetStartPosition(); // 获取第一个文件名的起点位置
	while(pos!=NULL) {  // 如果有文件可以获取
		FileName = dlg.GetNextPathName(pos); // 获取文件名,并移到下一个文件名的起始位置
		ProcessAFile(FileName); // 调用处理单个文件的函数
		fileCount ++; // 这里有点问题,实际上并不知道是否"真的"处理了文件,
					// 也许调用的函数打开了一个文件但不符合处理要求,
					// 根本没有处理文件
	}

	AfxMessageBox("全部文件处理完毕!");
	return fileCount; // 返回文件个数
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -