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

📄 data.cpp

📁 关联规则中转换树算法在VC下的实现
💻 CPP
字号:
// data.cpp: implementation of the data class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "AssocRule.h"
#include "data.h"
#include "Globals.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

data::data(char *filename)
{
#ifdef BINARY
	fin = fopen(filename, "rb");	
#else
	fin = fopen(filename,"rt");
#endif
}

data::~data()
{
	if(fin) fclose(fin);
}

int data::isOpen()
{
	if(fin) return 1;
	else return 0;
}

Transaction *data::getNextTrans(Transaction* Trans)
{
	Trans->length = 0;
	
	// read list of items
#ifndef BINARY	  
	char c;
	int item, pos;
	do {
		item=0;
		pos=0;
		c = getc(fin);
		while((c >= '0') && (c <= '9')) {
			item *=10;
			item += int(c)-int('0');
			c = getc(fin);
			pos++;
		}
		if(pos)
		{
			if(Trans->length >= Trans->maxlength)
				Trans->EnlargeTranSize(Trans->length, 2);
			
			Trans->t[Trans->length] = item;
			Trans->length++;
		}
	}while(c != '\n' && !feof(fin));
	// if end of file is reached, rewind to beginning for next pass
	if(feof(fin)){
		rewind(fin);
		return 0;
	}
	// Note, also last transaction must end with newline, 
	// else, it will be ignored
#else
	int i, nitem, *buffer=new int;
	fread((char*)buffer, sizeof(int), 1, fin);
	if(feof(fin))
	{
		rewind(fin);
		return 0;
	}
	//	fread((char*)buffer, sizeof(int), 1, fin);
	//	fread((char*)buffer, sizeof(int), 1, fin);
	nitem=*buffer;
	if(nitem >= Trans->maxlength)
		Trans->EnlargeTranSize(Trans->maxlength, nitem/Trans->maxlength+1);
	
	i=fread((char*)Trans->t, sizeof(int), nitem, fin);
	if (i<nitem)
	{
		rewind(fin);
		return 0;
	}
	
	Trans->length = nitem;
#endif
	
	return Trans;
}

void Transaction::EnlargeTranSize(int item, int m)
{
	int* temp = new int[m*item];
	maxlength = m*item;
	for(int i=0; i<length; i++)
		temp[i] = t[i];
	delete []t;
	t = temp;
}

⌨️ 快捷键说明

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