w-data-csv 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.editorconfig +9 -0
  2. package/.eslintignore +3 -0
  3. package/.eslintrc.js +54 -0
  4. package/.jsdoc +25 -0
  5. package/README.md +54 -0
  6. package/SECURITY.md +5 -0
  7. package/babel.config.js +14 -0
  8. package/dist/w-data-csv.umd.js +7 -0
  9. package/dist/w-data-csv.umd.js.map +1 -0
  10. package/docs/WDataCsv.mjs.html +242 -0
  11. package/docs/fonts/Montserrat/Montserrat-Bold.eot +0 -0
  12. package/docs/fonts/Montserrat/Montserrat-Bold.ttf +0 -0
  13. package/docs/fonts/Montserrat/Montserrat-Bold.woff +0 -0
  14. package/docs/fonts/Montserrat/Montserrat-Bold.woff2 +0 -0
  15. package/docs/fonts/Montserrat/Montserrat-Regular.eot +0 -0
  16. package/docs/fonts/Montserrat/Montserrat-Regular.ttf +0 -0
  17. package/docs/fonts/Montserrat/Montserrat-Regular.woff +0 -0
  18. package/docs/fonts/Montserrat/Montserrat-Regular.woff2 +0 -0
  19. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.eot +0 -0
  20. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.svg +978 -0
  21. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.ttf +0 -0
  22. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff +0 -0
  23. package/docs/fonts/Source-Sans-Pro/sourcesanspro-light-webfont.woff2 +0 -0
  24. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.eot +0 -0
  25. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.svg +1049 -0
  26. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.ttf +0 -0
  27. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff +0 -0
  28. package/docs/fonts/Source-Sans-Pro/sourcesanspro-regular-webfont.woff2 +0 -0
  29. package/docs/global.html +787 -0
  30. package/docs/index.html +81 -0
  31. package/docs/scripts/collapse.js +20 -0
  32. package/docs/scripts/linenumber.js +25 -0
  33. package/docs/scripts/nav.js +12 -0
  34. package/docs/scripts/polyfill.js +4 -0
  35. package/docs/scripts/prettify/Apache-License-2.0.txt +202 -0
  36. package/docs/scripts/prettify/lang-css.js +2 -0
  37. package/docs/scripts/prettify/prettify.js +28 -0
  38. package/docs/scripts/search.js +83 -0
  39. package/docs/styles/jsdoc.css +765 -0
  40. package/docs/styles/prettify.css +79 -0
  41. package/g-read.mjs +15 -0
  42. package/g-test-in.csv +3 -0
  43. package/g-test-out.csv +3 -0
  44. package/g-write.mjs +16 -0
  45. package/package.json +30 -0
  46. package/src/WDataCsv.mjs +173 -0
  47. package/test/PCA.test.mjs +125 -0
  48. package/test/cluster.test.mjs +135 -0
  49. package/toolg/addVersion.mjs +4 -0
  50. package/toolg/cleanFolder.mjs +4 -0
  51. package/toolg/gDistRollup.mjs +38 -0
  52. package/toolg/gDocsExams.mjs +48 -0
  53. package/toolg/modifyReadme.mjs +4 -0
@@ -0,0 +1,242 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+
5
+ <meta charset="utf-8">
6
+ <title>WDataCsv.mjs - Documentation</title>
7
+
8
+
9
+ <script src="scripts/prettify/prettify.js"></script>
10
+ <script src="scripts/prettify/lang-css.js"></script>
11
+ <!--[if lt IE 9]>
12
+ <script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
13
+ <![endif]-->
14
+ <link type="text/css" rel="stylesheet" href="styles/prettify.css">
15
+ <link type="text/css" rel="stylesheet" href="styles/jsdoc.css">
16
+ <script src="scripts/nav.js" defer></script>
17
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
18
+ </head>
19
+ <body>
20
+
21
+ <input type="checkbox" id="nav-trigger" class="nav-trigger" />
22
+ <label for="nav-trigger" class="navicon-button x">
23
+ <div class="navicon"></div>
24
+ </label>
25
+
26
+ <label for="nav-trigger" class="overlay"></label>
27
+
28
+ <nav >
29
+
30
+ <h2><a href="index.html">Home</a></h2><h3>Global</h3><ul><li><a href="global.html#readCsv">readCsv</a></li><li><a href="global.html#WDataCsv">WDataCsv</a></li><li><a href="global.html#writeCsv">writeCsv</a></li></ul>
31
+ </nav>
32
+
33
+ <div id="main">
34
+
35
+ <h1 class="page-title">WDataCsv.mjs</h1>
36
+
37
+
38
+
39
+
40
+
41
+
42
+
43
+ <section>
44
+ <article>
45
+ <pre class="prettyprint source linenums"><code>import fs from 'fs'
46
+ import csvParse from 'csv-parser'
47
+ import stripBom from 'strip-bom-stream'
48
+ import get from 'lodash/get'
49
+ import genPm from 'wsemi/src/genPm.mjs'
50
+ import ltdtkeysheads2mat from 'wsemi/src/ltdtkeysheads2mat.mjs'
51
+ import getCsvStrFromData from 'wsemi/src/getCsvStrFromData.mjs'
52
+
53
+
54
+ /**
55
+ * 讀取CSV檔,自動清除BOM
56
+ *
57
+ * @param {String} fp 輸入檔案位置字串
58
+ * @return {Promise} 回傳Promise,resolve回傳ltdt(各數據列為物件陣列),reject回傳錯誤訊息
59
+ * @example
60
+ *
61
+ * import wdc from './src/WDataCsv.mjs'
62
+ *
63
+ * let fp = './g-test-in.csv'
64
+ * wdc.readCsv(fp)
65
+ * .then((ltdt) => {
66
+ * console.log(ltdt)
67
+ * // => [ { NAME: 'Daffy Duck', AGE: '24' }, { NAME: 'Bugs 邦妮', AGE: '22' } ]
68
+ * })
69
+ * .catch((err) => {
70
+ * console.log(err)
71
+ * })
72
+ *
73
+ */
74
+ async function readCsv(fp) {
75
+ let res = []
76
+ let pm = genPm()
77
+ fs.createReadStream(fp)
78
+ .pipe(stripBom())
79
+ .pipe(csvParse())
80
+ .on('data', (data) => {
81
+ // console.log('data', data)
82
+ res.push(data)
83
+ })
84
+ .on('end', () => {
85
+ pm.resolve(res)
86
+ })
87
+ .on('error', (err) => {
88
+ pm.reject(err)
89
+ })
90
+ return pm
91
+ }
92
+
93
+
94
+ /**
95
+ * 輸出數據至CSV檔案
96
+ *
97
+ * @param {String} fp 輸入檔案位置字串
98
+ * @param {Array} data 輸入數據陣列,為mat或ltdt格式
99
+ * @param {Object} [opt={}] 輸入設定物件,預設{}
100
+ * @param {String} [opt.mode='ltdt'] 輸入數據格式字串,可選ltdt或mat,預設ltdt
101
+ * @param {Array} [opt.keys=[]] 輸入指定欲輸出鍵值陣列,預設[]
102
+ * @param {Object} [opt.kphead={}] 輸入指定鍵值轉換物件,預設{}
103
+ * @return {Promise} 回傳Promise,resolve回傳成功訊息,reject回傳錯誤訊息
104
+ * @example
105
+ *
106
+ * import wdc from './src/WDataCsv.mjs'
107
+ *
108
+ * let ltdt = [{ name: '大福 Duck', value: 2.4 }, { name: 'Bugs 邦妮', value: '2.2' }]
109
+ * let fp = './g-test-out.csv'
110
+ * wdc.writeCsv(fp, ltdt)
111
+ * .then((res) => {
112
+ * console.log(res)
113
+ * // => finish
114
+ * })
115
+ * .catch((err) => {
116
+ * console.log(err)
117
+ * })
118
+ *
119
+ */
120
+ async function writeCsv(fp, data, opt = {}) {
121
+ let err = null
122
+ let mat
123
+ let c = ''
124
+
125
+ //mode
126
+ let mode = get(opt, 'mode')
127
+ if (mode !== 'ltdt' &amp;&amp; mode !== 'mat') {
128
+ mode = 'ltdt'
129
+ }
130
+
131
+ if (mode === 'mat') {
132
+
133
+ //save
134
+ mat = data
135
+
136
+ }
137
+ else if (mode === 'ltdt') {
138
+ try {
139
+
140
+ //save
141
+ let ltdt = data
142
+
143
+ //keys
144
+ let keys = get(opt, 'keys')
145
+
146
+ //kphead
147
+ let kphead = get(opt, 'kphead')
148
+
149
+ //ltdtkeysheads2mat
150
+ mat = ltdtkeysheads2mat(ltdt, keys, kphead)
151
+
152
+ }
153
+ catch (e) {
154
+ err = e.toString()
155
+ return Promise.reject(err)
156
+ }
157
+ }
158
+
159
+ //getCsvStrFromData
160
+ try {
161
+ c = getCsvStrFromData(mat)
162
+ }
163
+ catch (e) {
164
+ err = e.toString()
165
+ return Promise.reject(err)
166
+ }
167
+
168
+ //writeFileSync
169
+ try {
170
+ fs.writeFileSync(fp, c, 'utf8')
171
+ }
172
+ catch (e) {
173
+ err = e.toString()
174
+ return Promise.reject(err)
175
+ }
176
+
177
+ return 'finish'
178
+ }
179
+
180
+
181
+ /**
182
+ * 讀寫CSV檔
183
+ *
184
+ * @return {Object} 回傳物件,其內有readCsv與writeCsv函式
185
+ * @example
186
+ *
187
+ * import wdc from './src/WDataCsv.mjs'
188
+ *
189
+ * let fpIn = './g-test-in.csv'
190
+ * wdc.readCsv(fpIn)
191
+ * .then((ltdtIn) => {
192
+ * console.log(ltdtIn)
193
+ * // => [ { NAME: 'Daffy Duck', AGE: '24' }, { NAME: 'Bugs 邦妮', AGE: '22' } ]
194
+ * })
195
+ * .catch((err) => {
196
+ * console.log(err)
197
+ * })
198
+ *
199
+ * let ltdtOut = [{ name: '大福 Duck', value: 2.4 }, { name: 'Bugs 邦妮', value: '2.2' }]
200
+ * let fpOut = './g-test-out.csv'
201
+ * wdc.writeCsv(fpOut, ltdtOut)
202
+ * .then((res) => {
203
+ * console.log(res)
204
+ * // => finish
205
+ * })
206
+ * .catch((err) => {
207
+ * console.log(err)
208
+ * })
209
+ *
210
+ */
211
+ let WDataCsv = {
212
+ readCsv,
213
+ writeCsv,
214
+ }
215
+
216
+
217
+ export default WDataCsv
218
+ </code></pre>
219
+ </article>
220
+ </section>
221
+
222
+
223
+
224
+
225
+
226
+
227
+ </div>
228
+
229
+ <br class="clear">
230
+
231
+ <footer>
232
+ Documentation generated by <a href="https://github.com/jsdoc3/jsdoc">JSDoc 3.6.10</a> on Tue Apr 26 2022 11:57:37 GMT+0800 (台北標準時間) using the <a href="https://github.com/clenemt/docdash">docdash</a> theme.
233
+ </footer>
234
+
235
+ <script>prettyPrint();</script>
236
+ <script src="scripts/polyfill.js"></script>
237
+ <script src="scripts/linenumber.js"></script>
238
+
239
+
240
+
241
+ </body>
242
+ </html>