📄 getdatadlg.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 + -