in nlpcraft/src/main/scala/org/apache/nlpcraft/internal/util/NCUtils.scala [389:441]
private def getAndLog[T](data: T, f: File, log: Logger = logger): T =
log.trace(s"Loaded file: ${f.getAbsolutePath}")
data
/**
* Reads lines from given resource.
*
* @param res Resource, file absolute or relative path or input stream.
* @param enc Encoding. Default value is "UTF-8".
* @param strip Strip flag. If `true` it strips all read lines. Default value is `true`.
* @param convert Line conversion method. Applied after `strip`. By default it passes lines as is.
* @param filterText. Filtering text flag. If `true` it skips empty lines and lines with headers (# symbol). Default value is `false`.
* @param log Logger.
*/
def readLines(
res: String | File | InputStream,
enc: String = "UTF-8",
strip: Boolean = true,
convert: String => String = s => s,
filterText: Boolean = false,
log: Logger = logger
): Iterator[String] =
try
val (stream, name) =
res match
case is: InputStream => (is, is.getClass.getName)
case s: String => (new BufferedInputStream(getStream(s)), s)
case f: File => (new BufferedInputStream(new FileInputStream(f)), f.getAbsolutePath)
val out = Source.fromInputStream(stream, enc).getLines().flatMap(line =>
val s = convert(if strip then line.strip else line)
Option.when(!filterText || s.nonEmpty && s.head != '#')(s)
)
log.info(s"Loaded resource: $name")
out
catch case e: IOException => E(s"Failed to read stream: $res", e)
/**
*
* @param bodies
* @param ec
*/
def execPar(bodies: Seq[() => Any])(ec: ExecutionContext): Unit =
val errs = new CopyOnWriteArrayList[Throwable]()
bodies.map(body => Future {
try
body()
catch
case e: Throwable => errs.add(e)
} (ec)).foreach(Await.result(_, Duration.Inf))