紫影基地

 找回密码
 立即注册
查看: 138|回复: 0

自己手搓的CSV解释器

[复制链接]
阅读字号:

2001

主题

2116

帖子

21万

积分

超级版主

Rank: 8Rank: 8

积分
210086
发表于 2024-6-26 13:07:34 | 显示全部楼层 |阅读模式
  1. 自己手搓的CSV解释器

  2. class csv {

  3.     constructor( csvData ){

  4.         this.csvData = csvData

  5.     }

  6.     readAsArrays( backobj=false ){

  7.         let data = ( function( csv ){

  8.             let ret = []

  9.             csv.forEach( function( v ){

  10.                 ret.push( v.split( "," ))

  11.             })

  12.             return ret

  13.         } )( this.csvData.split( "\n" ) )

  14.         if( backobj == false ){

  15.             return data

  16.         } else {

  17.             return {

  18.                 result : data,

  19.                 json : JSON.stringify( data, 0, 4 ),

  20.                 pushTo : function( array ){

  21.                     array.concat( data )

  22.                     return this

  23.                 },

  24.                 then : function( func ){

  25.                     func( this, data )

  26.                     return this

  27.                 },

  28.                 each : function( callback ){

  29.                     for( let line in data ){

  30.                         for( let pos in data[line] ){

  31.                             callback( data[line][pos], [ line, pos ] )

  32.                             //value index

  33.                         }

  34.                     }

  35.                     return this

  36.                 }

  37.             }

  38.         }

  39.     }

  40.     readAsList( backobj=false ){

  41.         let data = ( function( csv ){

  42.             let ret = {}

  43.             for( let key in csv[0] ){

  44.                 ret[ csv[0][ key ] ] = []

  45.                 for( let line in csv ){

  46.                     if( line > 0 ){

  47.                         ret[ csv[0][ key ] ]

  48.                           .push( csv[ line ][ key ] )

  49.                     }

  50.                 }

  51.             }

  52.             return ret

  53.         } )( this.readAsArrays() )

  54.         if( backobj == false ){

  55.             return data

  56.         } else {

  57.             return {

  58.                 result : data,

  59.                 json : JSON.stringify( data, 0, 4 ),

  60.                 pushTo : function( obj ){

  61.                     Object.assign( obj, data )

  62.                     return this

  63.                 },

  64.                 then : function( func ){

  65.                     func( this, data )

  66.                     return this

  67.                 },

  68.                 each : function( callback ){

  69.                     for( let line of Object.keys( data ) ){

  70.                         for( let pos in data[line] ){

  71.                             callback( data[line][pos], [ line, pos ] )

  72.                             //value index

  73.                         }

  74.                     }

  75.                     return this

  76.                 }

  77.             }

  78.         }

  79.     }

  80.     readAsObject( backobj=false ){

  81.         let data = ( function( csv ){

  82.             let ret = {}

  83.             for( let line in csv ){

  84.                 eval( "ret." + csv[line]

  85.                   .slice( 0, -1 )

  86.                   .join( "." ) + "='" + csv[line]

  87.                   .slice( -1 )

  88.                   .join( " " ) + "'" )

  89.             }

  90.             return ret

  91.         } )( this.readAsArrays() )

  92.         if( backobj == false ){

  93.             return data

  94.         } else {

  95.             return {

  96.                 result : data,

  97.                 json : JSON.stringify( data, 0, 4 ),

  98.                 pushTo : function( obj ){

  99.                     Object.assign( obj, data )

  100.                     return this

  101.                 },

  102.                 then : function( func ){

  103.                     func( this, data )

  104.                     return this

  105.                 },

  106.                 each : function( callback ){

  107.                     for( let line of Object.keys( data ) ){

  108.                         callback( data[line], line )

  109.                     }

  110.                     return this

  111.                 }

  112.             }

  113.         }

  114.     }

  115. }

  116. 复制代码

  117. //test arraysMode

  118. var hwdt = new csv( "hello,World,5,5" )

  119.   .readAsArrays( true )

  120.   .then( function( fns, dt ){

  121.     console.log( "数据 : " + dt.join( " " ) )

  122.     console.log( "JSON : " + fns.json )

  123.   } )

  124.   .each( function( v, i ){

  125.     console.log( "值: " + v + " 位置: " + i )

  126.   } )

  127.   .result

  128. console.log( hwdt )



  129. //test listMode

  130. var foodList = new csv( `

  131. morning,afternoon,night

  132. rice,water,juice

  133. fish,meat,candy

  134. `.trim() ).readAsList( true )

  135.   .then( function( fns ){

  136.     console.log( "JSON : " + fns.json )

  137.   } )

  138.   .each( function( v, i ){

  139.     console.log( i[0] + " eat " + v )

  140.   } )

  141.   .result

  142. console.log( "早上吃 :  " + foodList.morning.join( " & " ) )

  143. 复制代码
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|紫影基地

GMT+8, 2025-1-12 08:37 , Processed in 0.081062 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表