\Header{fileMuncher}{Dynamically create a Perl script to parse a source file base on
user specifications}
\alias{mergeRowByKey}{fileMuncher}
\keyword{manip}{fileMuncher}
\begin{Description}\relax
This function takes a base file, a source file, and a segment of Perl
script specifying how the source file will be pased and the generates
a fully executable Perl script that is going to be called to parse the
source file.\end{Description}
\begin{Usage}
\begin{verbatim}
fileMuncher(outName, baseFile, dataFile, parser, isDir = FALSE)
mergeRowByKey(mergeMe, keyCol = 1, sep = ";")
\end{verbatim}
\end{Usage}
\begin{Arguments}
\begin{ldescription}
\item[\code{outName}] \code{outName} a character string the name of the file
where the parsed data will be stored
\item[\code{baseFile}] \code{baseFile} a character string for the name of the
file that is going to be used as the base to process the source
file. Only data that are corresponding to the ids defined in the
base file will be processed and mapped
\item[\code{dataFile}] \code{dataFile} a character string for the name of the
source data file
\item[\code{parser}] \code{perInst} a character string for the name of the
file containing a segment of the a Perl script for parsing the
source file. An output connection to OUT that is for storing parsed
data, an input connection to BASE for inporting base file, and an
input connection to DATA for reading the source data file are
assumed to be open. perlInst should define how BASE, DATA will be
used to extract data and then store them in OUT
\item[\code{pathForPerl}] A character string for the path to which temporary
Perl scripts will be stored.
\item[\code{isDir}] \code{isDir} a boolean indicating whether dataFile is a
name of a directory (TRUE) or not (FALSE)
\item[\code{mergeMe}] \code{mergeMe} a data matrix that is going to be
processed to merge rows with duplicating keys
\item[\code{keyCol}] \code{keyCol} an integer for the index of the column
containing keys based on which entries will be mereged
\item[\code{sep}] \code{sep} a charater string for the separater used to
separate multiple values
\end{ldescription}
\end{Arguments}
\begin{Details}\relax
The system is assumed to be able to run Perl. Perl scripts generated
dynamically will also be removed after execution.

\code{\Link{mergeRowByKey}} merges data based on common keys. Keys
multiple values for a given key will be separated by "sep".\end{Details}
\begin{Value}
\code{\Link{fileMuncher}} returns a character string for the name of
the output file

\code{\Link{mergeRowByKey}} returns a matrix with merged data.\end{Value}
\begin{Note}\relax
This function is part of the Bioconductor project at Dana-Farber
Cancer Institute to provide Bioinformatics functionalities through R\end{Note}
\begin{Author}\relax
Jianhua Zhang\end{Author}
\begin{SeeAlso}\relax
\code{\Link{resolveMaps}}\end{SeeAlso}
\begin{Examples}
\begin{ExampleCode}
if(interactive()){
path <- file.path(.path.package("pubRepo"), "data")
temp <- matrix(c("32469_f_at", "D90278", "32469_at", "L00693", "33825_at",
"X68733", "35730_at", "X03350", "38912_at", "D90042", "38936_at",
"M16652"), ncol = 2, byrow = TRUE)
write.table(temp, "tempBase", sep = "\t", quote = FALSE,
row.names = FALSE, col.names = FALSE)
# Parse a truncated version of LL\_tmpl.gz from Bioconductor
srcFile <-
loadFromUrl("http://www.bioconductor.org/datafiles/wwwsources/Tll_tmpl.gz")  
fileMuncher(outName = "temp", baseFile = "tempBase", dataFile = srcFile,
parser =  file.path(path, "basedLLParser"), isDir = FALSE)
# Show the parsed data
read.table(file = "temp", sep = "\t", header = FALSE)
unlink("tempBase")
unlink("temp")
}
\end{ExampleCode}
\end{Examples}

