📄 randomarrayfromtxt.cpp
字号:
#include "stdafx.h"
#include "RandomArrayFromTxt.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CRandomArrayFromTxt
CRandomArrayFromTxt::CRandomArrayFromTxt()
{
}
CRandomArrayFromTxt::~CRandomArrayFromTxt()
{
}
BEGIN_MESSAGE_MAP(CRandomArrayFromTxt, CWnd)
//{{AFX_MSG_MAP(CRandomArrayFromTxt)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CRandomArrayFromTxt message handlers
void CRandomArrayFromTxt::GetRandomArrayFromTxt(int m_Collect_Times,double *a_Random,int m_Txt_Line,int m_Txt_Row,int m_Txt_Spacing)
{
int m,mx,my,cl;
srand((unsigned)time(NULL)); // 生成时间种子
m=rand()%m_Txt_Line; // 返回一个0-m_Txt_Line-1的随机数,即查表的起始位置
mx=m%m_Txt_Row; // 查表起始位置的列号,文件头为0行0列
my=m/m_Txt_Row; // 查表起始位置的行号
cl=(m_Collect_Times+mx-1)/m_Txt_Row+1; // 需要从数表中读取的行数
// 打开txt文本的数表。
CStdioFile file1( "C:\\Documents and Settings\\Yg\\桌面\\7-15-1130\\Rd\\Debug\\ramdom1000.txt",CFile::modeNoTruncate | CFile::modeRead | CFile::typeText);
CString strc;
int ct=0; // 用于记录当前已经取得的随机数个数
for(m=0;m<my;m++)
{
file1.ReadString(strc);
}
// 取出有用的行,直到取够为之
for(int n=0;n<cl;n++)
{
if(n+my==m_Txt_Line)
file1.SeekToBegin(); // 数表不够长,重新定位到文件头
file1.ReadString(strc);
if(n==0) // 如果是取得的第一行
{
int aw1,aw2;
aw1=strc.GetLength();
for(m=0;m<mx+1;m++) // 过掉前面无用的空格
{
aw1=strc.GetLength();
aw2=strc.Find(" "); // 找到作为间隔的前三个空格所在位置
strc=strc.Right(aw1-aw2-m_Txt_Spacing); // 取这三个空格右边的所有字符串
}
// 下面取出剩下的字符串中每三个空格前面的字符串,就是所要查一个数据
for(m=0;m<m_Txt_Row-mx&&ct<m_Collect_Times;m++)
{
aw2=strc.Find(" "); // 找到作为间隔的后三个空格所在位置
if(mx==m_Txt_Row-1||m==m_Txt_Row-mx-1)
a_Random[ct]=atof(strc);
else
a_Random[ct]=atof(strc.Left(aw2)); // 保存数据到数组
aw1=strc.GetLength();
aw2=strc.Find(" "); // 找到作为间隔的前三个空格所在位置
strc=strc.Right(aw1-aw2-m_Txt_Spacing); // 取这三个空格右边的所有字符串
ct++;
}
}
else
{
GetRandomArrayFromALine(strc,a_Random,m_Collect_Times,m_Txt_Row,m_Txt_Spacing,ct);
ct+=m_Txt_Row;
}
}
file1.Close();
}
// 从一行中取出数字
void CRandomArrayFromTxt::GetRandomArrayFromALine(CString strc,double *a_Random,int m_Collect_Times,int m_Txt_Row,int m_Txt_Spacing,int ct)
{
int aw1,aw2;
aw1=strc.GetLength();
aw2=strc.Find(" ");
strc=strc.Right(aw1-aw2-m_Txt_Spacing); // 取这三个空格右边的所有字符串
for(int m=0;m<m_Txt_Row&&ct<m_Collect_Times;m++)
{
aw2=strc.Find(" ");
if(m==m_Txt_Row-1)
a_Random[ct]=atof(strc);
else
a_Random[ct]=atof(strc.Left(aw2)); // 保存数据到数组
aw1=strc.GetLength();
aw2=strc.Find(" "); // 找到作为间隔的前三个空格所在位置
strc=strc.Right(aw1-aw2-m_Txt_Spacing); // 取这三个空格右边的所有字符串
ct++;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -