package Ġde . mark us fis ch . android . binary eye . database Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġde . mark us fis ch . android . binary eye . app . to HexString Ċ import Ġde . mark us fis ch . android . binary eye . app . write External File Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . io . OutputStream Ċ Ċ fun Ġexport Csv ( Ċ ĉ context : ĠContext , Ċ ĉ name : ĠString , Ċ ĉ cursor : ĠCursor , Ċ ĉ delimiter : ĠString Ċ ) Ġ= Ġwrite External File ( context , Ġname , Ġ" text / csv ") Ġ{ ĠoutputStream Ġ-> Ċ ĉ export Csv ( output Stream , Ġcursor , Ġdelimiter ) Ċ } Ċ Ċ fun Ġexport Csv ( cursor : ĠCursor , Ġdelimiter : ĠString ): ĠString ? Ġ{ Ċ ĉ val ĠoutputStream Ġ= ĠByteArrayOutputStream () Ċ ĉ export Csv ( output Stream , Ġcursor , Ġdelimiter ) Ċ ĉ return ĠoutputStream . toString () Ċ } Ċ Ċ private Ġfun Ġexport Csv ( Ċ ĉ output Stream : ĠOutputStream , Ċ ĉ cursor : ĠCursor , Ċ ĉ delimiter : ĠString Ċ ) Ġ{ Ċ ĉ if Ġ(! cursor . moveTo First ()) Ġ{ Ċĉ ĉ return Ċ ĉ } Ċ ĉ val Ġcolumns Ġ= ĠarrayOf ( Ċĉ ĉ Database . SCAN S _ DATETIME , Ċĉ ĉ Database . SCAN S _ FORMAT , Ċĉ ĉ Database . SCAN S _ CONTENT , Ċĉ ĉ Database . SCAN S _ ERROR _ COR RECTION _ LEVEL , Ċĉ ĉ Database . SCAN S _ ISSUE _ NUMBER , Ċĉ ĉ Database . SCAN S _ OR IENTATION , Ċĉ ĉ Database . SCAN S _ OTHER _ META _ DATA , Ċĉ ĉ Database . SCAN S _ PDF 4 1 7 _ EXTRA _ METADATA , Ċĉ ĉ Database . SCAN S _ PO SS IBLE _ COUNTRY , Ċĉ ĉ Database . SCAN S _ SU G GEST ED _ PRICE , Ċĉ ĉ Database . SCAN S _ UP C _ E AN _ EXTENSION Ċ ĉ ) Ċ ĉ val Ġindices Ġ= Ġcolumns . map Ġ{ Ċĉ ĉ cursor . getColumnIndex ( it ) Ċ ĉ } Ċ ĉ val Ġcontent Index Ġ= Ġcursor . getColumnIndex ( Database . SCAN S _ CONTENT ) Ċ ĉ val Ġraw Index Ġ= Ġcursor . getColumnIndex ( Database . SCAN S _ RAW ) Ċ ĉ output Stream . write ( Ċĉ ĉ columns . join ToString ( Ċĉĉ ĉ delimiter , Ċĉĉ ĉ postfix Ġ= Ġ"\ n " Ċĉ ĉ ). toByteArray () Ċ ĉ ) Ċ ĉ do Ġ{ Ċĉ ĉ var Ġdeviation : ĠPair < Int , ĠString >? Ġ= Ġnull Ċĉ ĉ if Ġ( cursor . getString ( content Index )?. isEmpty () Ġ== Ġtrue ) Ġ{ Ċĉĉ ĉ dev iation Ġ= ĠPair ( Ċĉĉĉ ĉ content Index , Ċĉĉĉ ĉ cursor . get Blob ( raw Index ). to HexString () Ċĉĉ ĉ ) Ċĉ ĉ } Ċĉ ĉ output Stream . write ( Ċĉĉ ĉ cursor . to Csv Record ( indices , Ġdelimiter , Ġdeviation ) Ċĉ ĉ ) Ċ ĉ } Ġwhile Ġ( cursor . moveTo Next ()) Ċ } Ċ Ċ private Ġfun ĠCursor . to Csv Record ( Ċ ĉ indices : ĠList < Int >, Ċ ĉ delimiter : ĠString , Ċ ĉ dev iation : ĠPair < Int , ĠString >? Ċ ): ĠByteArray Ġ{ Ċ ĉ val Ġsb Ġ= ĠStringBuilder () Ċ ĉ indices . forEach Ġ{ Ċĉ ĉ val Ġvalue Ġ= Ġif Ġ( dev iation ?. first Ġ== Ġit ) Ġ{ Ċĉĉ ĉ dev iation . second Ċĉ ĉ } Ġelse Ġ{ Ċĉĉ ĉ this . getString ( it ) Ċĉ ĉ } Ċĉ ĉ sb . append ( value ?. quote And Escape () Ġ?: Ġ"") Ċĉ ĉ sb . append ( delimiter ) Ċ ĉ } Ċ ĉ sb . append ("\ n ") Ċ ĉ return Ġsb . toString (). toByteArray () Ċ } Ċ Ċ private Ġfun ĠString . quote And Escape () Ġ= Ġ"\" ${ this Ċ ĉ . replace ("\ n ", Ġ" Ġ") Ċ ĉ . replace (" \"", Ġ"\" \" ") }\ "" Ċ