home products news downloads documentation support gallery online maps resellers search
TNTmips Downloads Menu

HOME

CONTACT US

CURRENT RELEASE
  TNT 2013

DEVELOPMENT VERSION
  TNT 2014

TNTmips Pro
PRIOR RELEASES
  TNT 2012

FREE SOFTWARE
  TNTmips Free
  TNTatlas
  TNTsdk

MORE DOWNLOADS
  HASP Key Driver
  Screen Recorder
  TNT Language Kits
  Sample Geodata
  TNT Scripts

DOCUMENTATION
  TNTmips Tutorials
  Tutorial Datasets
  Technical Guides
  Scripts
  Quick Guides

MORE INFO
  Download FAQs
  FTP
  Download Managers
  Find Reseller

SITE MAP


inputmat.sml


########################################################
# InputMat.sml
#
# Use a procedure and an added sml function to parse a
# string and fill in a matrix of known size
# from values found in a text file
#
# NOTE: script uses compiled instr.c tntsdk example
# to find numeric text position inside of a string.  
# SML will not work
# unless you have successfully compiled and run instr.exe
# See TNTSDK examples.
#
# an example would be to read in a covariance matrix needed
# for the RasterLinearCombine Function.  Once filled, the
# matrix is available to other functions.
#
# a sample text file is provided, and assumes a predetermined
# format.  The format contains leading descriptive text that
# precludes the use of fgetnum() to read in numbers from files.
#
# AUTHOR: 	      Ray L. Harris, Jr.
# 
# REQUESTED BY:
# CREATION DATE: 	March 17, 1998
# REVISION LIST: 
########################################################

########################################################
#
#	Example Data
#
#        Band_1 Band_2 Band_3 Band_4
#CROP  : 0.0388 0.0759 0.0459 0.0659
#SOIL  : 0.0402 0.0518 0.0477 0.0816
#ROAD  : 0.0843 0.1423 0.2324 0.2698
########################################################

#######################################################
#
#  proc readValuesFromFile(pathandfilename$, matHandle)
#
#  procedure to read values from file where file format is
#  descriptive text to the left of the colon, and data for each
#  band to the right. Data is separated by spaces.
#
#
#
#  parameters:
#             pathandfilename$  string of filename to process
#             matHandle         a matrix handle filled by this function
#######################################################

#  procedure and function definitions
	proc readValuesFromFile(pathandfilename$, matHandle) {
	print ("reading", pathandfilename$)

	#check for file existence
	If (fexists(pathandfilename$, "r")) {

		# open the file
		fHandle = fopen(pathandfilename$, "r")

		# trim spaces and print the first row, it contains headers
		valuestring$ = fgetline$(fHandle)
		while (left$(valuestring$, 1) == " " and strlen(valuestring$) > 0) {
			valuestring$ = right$(valuestring$, (strlen(valuestring$) - 1))
		}
		print(valuestring$)

		# outer loop to fill matrix rows
		# row size determined by the 
		# size of the passed matrix 
		loopend = GetMatrixRowSize(matHandle) - 1
		for s = 0 to loopend  {
			get the first line from the file
			valuestring$ = fgetline$(fHandle)

			# look for the colon separator
			# could replace this with a popup to ask the user
			# to pick the separator
			substr$ = ":"

			# get colon position using InStr function
			posvalue = InStr(valuestring$,substr$, 1)

			linelength = strlen(valuestring$) - posvalue

			# chop off descriptive text before the colon
			valuestring$ = right$(valuestring$, linelength)

			#get four values and at the same time test for leading spaces
			newsubstring$ = " "
			for v = 0 to 3 {
				while (left$(valuestring$, 1) == " " and strlen(valuestring$) > 0) {
					valuestring$ = right$(valuestring$, (strlen(valuestring$) - 1))
				}
				# use StrToNum to convert leading value
				value = StrToNum(valuestring$)

				# fill the matrix
				SetMatrixItem(matHandle, s,v,value)

				# find the next space, trim and repeat
				nextpos = InStr(valuestring$, newsubstring$, 1)
				valuestring$ = right$(valuestring$, strlen(valuestring$) - nextpos)
			}
		}

		# print the matrix number and contents comma separated
		printf("%s%d\n", "Matrix: ", matHandle)
		# get the size of the matrix
		lastRow = GetMatrixRowSize(matHandle) - 1
		lastCol = GetMatrixColSize(matHandle) - 1
		for row = 0 to lastRow {
			for col = 0 to lastCol {
				printf("%1.4f,", \
				GetMatrixItem(matHandle, row, col))
				}
			print("  ")
			}
		print( "  " ) # print blank line after matrix output
	}

	# condition for wrong filename, could trap
	# an error, but not necessary
	else {
		print("Could not find or read file.")
		break

	}
	# close the text file 
	fclose(fHandle)
	} #end of proc printMatrix()

#######################################################

########################################################
# Main program
#
#
#
########################################################

# main program to test the procedure
clear()

# ask for the path and filename
prompt$ = "Enter path and filename."
filename$ = PopupString(prompt$, "c:/Program Files/MicroImages/TNT_70/smlsamples/inputmat_values.txt")

# make a matrix to fill
valuematrix = CreateMatrix(3,4)

# call the procedure
readValuesFromFile(filename$, valuematrix)

# test the returned matrix
testitem = GetMatrixItem(valuematrix,1,1)
printf("At row 1, col 1 the value is %1.4f\n", testitem)

# get rid of the matrix
DestroyMatrix(valuematrix)

#end main
########################################################


Back Home ©MicroImages, Inc. 2013 Published in the United States of America
11th Floor - Sharp Tower, 206 South 13th Street, Lincoln NE 68508-2010   USA
Business & Sales: (402)477-9554  Support: (402)477-9562  Fax: (402)477-9559
Business info@microimages.com  Support support@microimages.com  Web webmaster@microimages.com

25 March 2009

page update: 26 May 11