#!/bin/sh # Copyright for URLibService (c) 1995 - 2002, # by Gerald Banon - INPE. All rights reserved. # Version 2.1 # metadataArray2ASCII \ exec /usr/local/bin/tclsh "$0" ${1+"$@"} #
# metadataArray2ASCII converts metadataArray (of URLibService) into an
# ASCII table

package provide dpi.inpe.br/banon/2002/08.01.15.28 2.1

namespace eval dpi.inpe.br/banon/2002/08.01.15.28 {

# >
# ----------------------------------------------------------------------
# metadataArray2ASCII

proc metadataArray2ASCII {pathList {filter 0}} {
	global orderingTable
	global inverseTable

# Create fieldNameArray
	set referenceTypeList [array names orderingTable *,referencetype]
	regsub -all {,referencetype} $referenceTypeList {} referenceTypeList
	foreach referenceType $referenceTypeList {
		set fieldNameList [lsort -command FieldCompare \
			[array names orderingTable $referenceType,*]]
		regsub -all "$referenceType," $fieldNameList {} fieldNameList
		set fieldNameList [join $fieldNameList]
		set fieldNameArray($referenceType) $fieldNameList
	}
# Create fieldNameArray - end

	foreach path $pathList {
# puts $path
		source $path

# Create table
		set keyList [array names metadataArray *,referencetype]
		regsub -all {,referencetype} $keyList {} keyList
		set i 0	;# i is used for testing only (see if below)
		foreach key $keyList {
			incr i
			if $filter {
# insert only references having a secondary type field
				if ![info exists metadataArray($key,secondarytype)] {
# missing secondarytype
#					set log [list $path $key]
#					Store log @log auto 0 a
					continue
				}
			}
			set referenceType $metadataArray($key,referencetype)
			set keyList [array names metadataArray $key,*]
			set line "$key \t"
			foreach fieldName $fieldNameArray($referenceType) {
				if [info exists metadataArray($key,$fieldName)] {
					set fieldValue $metadataArray($key,$fieldName)
					if [regexp {%A|%E|%Y|%\?} $inverseTable($referenceType,$fieldName)] {
						regsub -all {,\}} $fieldValue "\}" fieldValue	;# drop trailing comma
						set fieldValue [string trim [join $fieldValue {; }] {; }]	;# put ; between author names
					}
					append line "$fieldValue\t"
				} else {
					append line "\t"
				}
			}
			append table($referenceType) "[string trim $line \t]\n"
#			if {$i == 5} {break}	;# for testing only		
		}
# Create table - end

# Create files
		foreach referenceType [array names table] {
			if ![file exists table$referenceType.txt ] {
				set header urlibkey\t[join $fieldNameArray($referenceType) \t]\n
				Store header table$referenceType.txt
			}
			Store table($referenceType) table$referenceType.txt auto 0 a
		}
# Create files - end
		if [info exists table] {unset table}
		unset metadataArray
	}
	return done
}

# ----------------------------------------------------------------------
# <
}

# Example:
# cd /home/banon/URLib/col/dpi.inpe.br/banon/2002/08.01.15.28/doc
# cd C:/usuario/gerald/URLib/col/dpi.inpe.br/banon/2002/08.01.15.28/doc
# cd /dados/URLib/col/dpi.inpe.br/banon/2002/08.01.15.28/doc
# source metadataArray2ASCII.tcl
# done

 global referRepository
 set referRepository dpi.inpe.br/banon/1999/08.08.19.14
 source ../../../../../dpi.inpe.br/banon/1998/08.02.08.56/doc/utilities1.tcl
 source ../../../../../dpi.inpe.br/banon/1998/08.02.08.56/doc/utilitiesStart.tcl
 source ../../../../../dpi.inpe.br/banon/1998/08.02.08.56/doc/utilitiesMirror.tcl
 source ../../../../../$referRepository/doc/referTables.tcl
 array set orderingTable [CreateOrderingTable]
 array set inverseTable [CreateInverseTable]

# set path C:/usuario/gerald/URLib/col/dpi.inpe.br/banon/1998/08.02.08.56/auxdoc/.metadataArray.tcl
## set path /dados/URLib/col/dpi.inpe.br/banon/1998/08.02.08.56/auxdoc/.metadataArray.tcl
## set path /iris3/URLibSRE/col/dpi.inpe.br/banon/1998/08.02.08.56/auxdoc/.metadataArray.tcl
## set path /dados/URLibSBSR/col/dpi.inpe.br/banon/1998/08.02.08.56/auxdoc/.metadataArray.tcl
# puts [dpi.inpe.br/banon/2002/08.01.15.28::metadataArray2ASCII $path]

#