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

📄 fileimport.c

📁 图像处理的压缩算法
💻 C
📖 第 1 页 / 共 3 页
字号:
/*------------------------------------------------------------------------------*
 * File Name:				 													*
 * Creation: 																	*
 * Purpose: OriginC Source C file												*
 * Copyright (c) ABCD Corp.	2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007		*
 * All Rights Reserved															*
 * 																				*
 * Modification Log:															*
 * EJP 07-07-2003 v7.0619 QA70-4783 POST_IMPORT_EXECUTE							*
 * EJP 07-28-2003 v7.0637 QA70-4911 IMPROVE_HDR_VAR_SCAN						*
 * EJP 07-29-2003 v7.0637 QA70-4898 PREPARE_WKS_FOR_IMPORT_NEED_USE_CORRECT_NUM_COLUMNS
 * EJP 08-07-2003 v7.0648 QA70-4934 FIX_COL_DESIGNATIONS_AND_FORMATS_SET		*
 * EJP 08-08-2003 v7.0650 QA70-4073.53 USE_SAME_FILTER_FOR_MULTI_FILES_ON_FILEOPEN_AND_DRAGDROP
 * EJP 08-12-2003 v7.0656 QA70-4808 IMPORT_INTO_LOCKED_COL_WARNING				*
 * EJP 08-12-2003 v7.0657 HIDE_DATA_WINDOW_ON_IMPORT_INTO_GRAPH					*
 * EJP 08-29-2003 v7.5680 IMPROVE_IMPORT_SPEED_OF_MANY_COLS						*
 * EJP 09-15-2003 v7.5695 QA70-5135.19 AVOID_UNWANTED_REPEATING_OF_LAST_COL_DESIG_AND_FORMAT
 * EJP 09-22-2003 v7.5701 QA70-4818 SAVE_FILTER_IN_WKS							*
 * EJP 09-24-2003 v7.5706 QA70-5230 NOTIFY_USER_OF_IMPORT_ERROR					*
 * EJP 09-26-2003 v7.5707 QA70-5239 IMPORT_INTO_TEXTNUMERIC_COLUMNS				*
 * EJP 11-12-2003 v7.5753 QA70-5211.11 FIX_SETTING_OF_DESIG_AND_FORMAT			*
 * EJP 11-24-2003 v7.5769 QA70-5417.18 FIX_DESIG_AND_FMT						*
 *------------------------------------------------------------------------------*/
 
////////////////////////////////////////////////////////////////////////////////////
// you can include just this typical header file for most Origin built-in functions and classes
// and it takes a reasonable amount of time to compile, 
#include <origin.h>

#include "FileImport.h"
#include "App_Utils.h"
#include "binimp.h"
#include "wks_utils.h"
#include "Filter_Utils.h"

bool iwGetFilter(LPCSTR lpcszDataFile, string &strFilterFile, TreeNode &trFilter);

#define PAGEINFO_IMPORTHEADER "ImportHeader"

////////////////////////////////////////////////////////////////////////////////////
static string s_strFilter; // filter file name
static string s_strGraphPage; // name of target graph page

/// EJP 08-08-2003 v7.0650 QA70-4073.53 USE_SAME_FILTER_FOR_MULTI_FILES_ON_FILEOPEN_AND_DRAGDROP
static Tree s_trFilter; // filter settings
/// end USE_SAME_FILTER_FOR_MULTI_FILES_ON_FILEOPEN_AND_DRAGDROP

////////////////////////////////////////////////////////////////////////////////////
// start your functions here

BOOL HandleDataFile()
{
	string strWinName;
	int	nLayer;
	int nFile;
	int	nNumFiles;
	string strFileName;
	Project.GetDragDropInfo(strWinName, nLayer, nFile, nNumFiles, strFileName);

	if( 0 == nFile )
	{
		s_strFilter.Empty();
		s_strGraphPage.Empty();
		
		/// EJP 08-08-2003 v7.0650 QA70-4073.53 USE_SAME_FILTER_FOR_MULTI_FILES_ON_FILEOPEN_AND_DRAGDROP
		s_trFilter.Reset();
		/// end USE_SAME_FILTER_FOR_MULTI_FILES_ON_FILEOPEN_AND_DRAGDROP
	}
	
	/// EJP 08-08-2003 v7.0650 QA70-4073.53 USE_SAME_FILTER_FOR_MULTI_FILES_ON_FILEOPEN_AND_DRAGDROP
	/*
	if( s_strFilter.IsEmpty() )
	{
		if( 1 != fuGetFilterFile(s_strFilter, strFileName) )
			return false;
	}

	Page pgData(strWinName);

	if( ImportFile(pgData, s_strFilter, strFileName, nFile) )
		return false;

	Tree trFilter;
	if( !trFilter.Load(s_strFilter) )
		return false;

	GraphPage grpg;
	grpg = GetTargetGraphPage(trFilter, strWinName, nLayer);
	if( grpg )
	{
		int nPlotID = fuGetPlotID(trFilter);
		GraphData(grpg, nLayer, nPlotID, pgData);
	}
	*/
	if( !fuIsApplicable(s_trFilter, strFileName) && !fuIsApplicable(s_strFilter, strFileName) )
	{
		/// EJP 09-22-2003 v7.5701 QA70-4818 SAVE_FILTER_IN_WKS
		Page pgTarget(strWinName);
		int iFilterType;
		bool bFilterInPage = false;
		if( fuIsOneFilterInPage(pgTarget, strFileName, iFilterType) )
			bFilterInPage = fuLoadFilterFromPage(s_trFilter, pgTarget, iFilterType);
		if( !bFilterInPage )
		{
		/// end SAVE_FILTER_IN_WKS
			if( 1 != fuGetFilterFile(s_strFilter, strFileName) )
			{
				if( !iwGetFilter(strFileName, s_strFilter, s_trFilter) )
					return FALSE;
			}
		/// EJP 09-22-2003 v7.5701 QA70-4818 SAVE_FILTER_IN_WKS
		}
		/// end SAVE_FILTER_IN_WKS
	}
	
	int iErr; /// EJP 09-24-2003 v7.5706 QA70-5230 NOTIFY_USER_OF_IMPORT_ERROR

	Page pgData(strWinName);
	if( s_strFilter.IsEmpty() )
	{
		/// EJP 09-24-2003 v7.5706 QA70-5230 NOTIFY_USER_OF_IMPORT_ERROR
		///if( ImportFile(pgData, s_trFilter, strFileName, nFile) )
		///	return false;
		iErr = ImportFile(pgData, s_trFilter, strFileName, nFile);
		/// end NOTIFY_USER_OF_IMPORT_ERROR
	}
	else
	{
		/// EJP 09-24-2003 v7.5706 QA70-5230 NOTIFY_USER_OF_IMPORT_ERROR
		///if( ImportFile(pgData, s_strFilter, strFileName, nFile) )
		///	return false;
		///if( !s_trFilter.Load(s_strFilter) )
		///	return false;
		iErr = ImportFile(pgData, s_strFilter, strFileName, nFile);
		if( IMPERR_NONE == iErr )
		{
			if( !s_trFilter.Load(s_strFilter) )
				iErr = IMPERR_LOAD_FILTER;
		}
		/// end NOTIFY_USER_OF_IMPORT_ERROR
	}
	
	/// EJP 09-24-2003 v7.5706 QA70-5230 NOTIFY_USER_OF_IMPORT_ERROR
	if( IMPERR_NONE != iErr )
	{
		ImportErrorMsgBox(iErr, s_strFilter);
		return false;
	}
	/// end NOTIFY_USER_OF_IMPORT_ERROR
	
	GraphPage grpg;
	grpg = GetTargetGraphPage(s_trFilter, strWinName, nLayer);
	if( grpg )
	{
		int nPlotID = fuGetPlotID(s_trFilter);
		GraphData(grpg, nLayer, nPlotID, pgData);
	}
	/// end USE_SAME_FILTER_FOR_MULTI_FILES_ON_FILEOPEN_AND_DRAGDROP

	return true;
}

int ImportFile(Page &pgTarget, LPCSTR lpcszFilter, LPCSTR lpcszFile, int nFile)
{
	if( NULL == lpcszFilter )
		return IMPERR_NO_FILTER; // no filter
	
	Tree trFilter;
	if( !trFilter.Load(lpcszFilter) )
		return IMPERR_LOAD_FILTER; // load filter error
	
	/// EJP 09-24-2003 v7.5706 QA70-5230 NOTIFY_USER_OF_IMPORT_ERROR
	///if( ImportFile(pgTarget, trFilter, lpcszFile, nFile) )
	///	return 1; // import error
	int iErr = ImportFile(pgTarget, trFilter, lpcszFile, nFile);
	if( IMPERR_NONE != iErr )
		return iErr;
	/// end NOTIFY_USER_OF_IMPORT_ERROR

	if( pgTarget )
		pgTarget.Info.System.Import.Filter$ = lpcszFilter;

	return IMPERR_NONE; // success
}

int ImportFile(Page &pgTarget, TreeNode &trFilter, LPCSTR lpcszFile, int nFile)
{
	int iFilterType = fuGetFilterType(trFilter);
	
	// Get the target data page.
	pgTarget = GetTargetDataPage(trFilter, pgTarget, nFile);
	if( !pgTarget && FILTER_TYPE_USERDEFINED != iFilterType )
		return IMPERR_NO_TARGET_PAGE; // no target page

	// If target page is a wks then setup the columns.
	string strColDesig, strColFormat;
	if( pgTarget && EXIST_WKS == pgTarget.GetType() )
	{
		/// EJP 09-24-2003 v7.5706 QA70-5230 NOTIFY_USER_OF_IMPORT_ERROR
		///	/// EJP 08-12-2003 v7.0656 QA70-4808 IMPORT_INTO_LOCKED_COL_WARNING
		///	///PrepareWksColsForImport(pgTarget, trFilter, lpcszFile);
		///	if( PrepareWksColsForImport(pgTarget, trFilter, lpcszFile) )
		///		return 1;
		///	/// end IMPORT_INTO_LOCKED_COL_WARNING
		int iErr = PrepareWksColsForImport(pgTarget, trFilter, lpcszFile);
		if( IMPERR_NONE != iErr )
			return iErr;
		/// end NOTIFY_USER_OF_IMPORT_ERROR
		Worksheet wks(pgTarget.GetName());
		if( wks )
		{
			strColDesig = wks.GetColDesignations();
			strColFormat = wks.GetColFormats();
		}

		/// EJP 11-24-2003 v7.5769 QA70-5417.18 FIX_DESIG_AND_FMT
		///	/// EJP 09-26-2003 v7.5707 QA70-5239 IMPORT_INTO_TEXTNUMERIC_COLUMNS
		///	// Importing into Text columns (and maybe others) will fail.
		///	// Instead we import into Text&Numeric and set user specified format afterwards.
		///	wks.SetColFormats("9", true); // temporary set all cols to Text&Numeric
		///	/// end IMPORT_INTO_TEXTNUMERIC_COLUMNS
		/// end FIX_DESIG_AND_FMT
	}

	// Get pointer to import function.
	PFNIMPORTFUNC pfn = fuGetImportFunctionPtr(trFilter);
	if( !pfn )
		return IMPERR_GET_IMPORT_FUNC; // no import function

	// Call import function.
	if( pfn(pgTarget, trFilter, lpcszFile, nFile) )
		return IMPERR_IMPORT_FUNC_ERR; // import function error

	if( pgTarget && EXIST_WKS == pgTarget.GetType() && FILTER_TYPE_USERDEFINED != iFilterType )
	{
		Worksheet wks(pgTarget.GetName());
		if( wks )
		{
			wks.SetColDesignations(strColDesig, false);
			wks.SetColFormats(strColFormat, false);
		}
	}
	
	// Check if not ASCII type because the intenal ASCII import code
	// will handle renaming the wks.
	if( FILTER_TYPE_ASCII != iFilterType && fuIsRenameWks(trFilter) )
	{
		string strNewName = GetFileName(lpcszFile, TRUE);
		if( !strNewName.IsEmpty() )
			pgTarget.Rename(strNewName);
	}
	
	if( pgTarget && fuIsFileNameToWksLabel(trFilter) )
	{
		pgTarget.Label = GetFileName(lpcszFile);
		pgTarget.TitleShow = WIN_TITLE_SHOW_BOTH;
	}
	
	// If data file has header parameters then add them to page info.
	if( pgTarget && fuGetHeaderParamCount(trFilter) )
		HeaderVariablesToPageInfo(pgTarget, trFilter, lpcszFile);

	/// EJP 07-10-2003 v7.0622 QA70-4745 SET_PAGE_IMPORT_INFO_ON_123_ASC_IMPORT
	/*
	// Set page import info.
	/// EJP 06-30-2003 v7.0613 QA70-4745 ADD_SYSTEM_IMPORT_FILEDATE
	double dJulianDate = 0.0;
	WIN32_FILE_ATTRIBUTE_DATA fad;
	if( GetFileAttributesEx(lpcszFile, 0, &fad) )
	{
		SYSTEMTIME st;
		if( FileTimeToSystemTime(&fad.ftLastWriteTime, &st) )
			SystemTimeToJulianDate(&dJulianDate, &st);
	}
	pgTarget.Info.System.Import.FileDate = dJulianDate;
	/// end ADD_SYSTEM_IMPORT_FILEDATE
	pgTarget.Info.System.Import.FileName$ = GetFileName(lpcszFile);
	pgTarget.Info.System.Import.FilePath$ = lpcszFile;
	pgTarget.Info.System.Import.Filter$ = ""; // filter file unknown
	pgTarget.Info.System.Import.FileType = trFilter.Type.nVal;
	*/
	set_page_import_info(pgTarget, lpcszFile, iFilterType);
	/// end SET_PAGE_IMPORT_INFO_ON_123_ASC_IMPORT

	// Save any requested header lines.
	if( FILTER_TYPE_ASCII == iFilterType )
	{
		int iFirstLine, iNumLines;
		fuGetHdrSave(trFilter, iFirstLine, iNumLines);
		if( iNumLines )
		{
			string strHdrLines;
			if( 0 == LoadTextFile(strHdrLines, lpcszFile, iNumLines, iFirstLine) )
			{
				vector<byte> vb;
				if( strHdrLines.GetBytes(vb) )
					pgTarget.SetMemory(PAGEINFO_IMPORTHEADER, vb);
			}
		}
	}

	/// EJP 07-07-2003 v7.0619 QA70-4783 POST_IMPORT_EXECUTE
	if( fuGetPostImportScript(trFilter, strColDesig) && !strColDesig.IsEmpty() )
	{
		if( pgTarget )
		{
			Layer lay = pgTarget.Layers();
			if( lay )
				lay.LT_execute(strColDesig);
		}
	}
	/// end POST_IMPORT_EXECUTE
	
	return IMPERR_NONE; // success
}

//--------------------------------------------------------------------------
// GetTargetDataPage
//
// Determine the target page for the data by using the filter and window
// name and layer (if drag-drop on a window).
// This function may return the page specified in the window name argument
// but that is not guranteed.  It depends on the filter settings.
//--------------------------------------------------------------------------
static Page GetTargetDataPage(TreeNode &trFilter, Page &pgTarget, int nFile)
{
	if( pgTarget && fuIsTargetPageType(trFilter, pgTarget.GetType()) )
	{
		if( 0 == nFile || ASCIMP_MODE_REPLACE_DATA != fuGetImportMode(trFilter) || IsPageEmpty(pgTarget) )
			return pgTarget; // use current page
	}

	/// EJP 08-12-2003 v7.0657 HIDE_DATA_WINDOW_ON_IMPORT_INTO_GRAPH
	///return fuCreateTargetPage(trFilter); // create a new page
	int iOption = CREATE_VISIBLE;
	if( pgTarget && EXIST_PLOT == pgTarget.GetType() )
		iOption = CREATE_HIDDEN;
	return fuCreateTargetPage(trFilter, iOption); // create a new page
	/// end HIDE_DATA_WINDOW_ON_IMPORT_INTO_GRAPH
}

static BOOL IsPageEmpty(Page &pg)
{
	string str = pg.GetName();
	if( EXIST_WKS == pg.GetType() )
	{
		WorksheetPage wkspg(str);
		if( wkspg )
		{
			Worksheet wks(str);
			if( wks )
			{
				int r1, r2;
				wks.GetRange(r1, r2, 0, -1, false);
				if( r2 == -1 ) // if wks is empty
					return TRUE;
			}

⌨️ 快捷键说明

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