Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Scala Macro Tools
提交
fde941c2
S
Scala Macro Tools
项目概览
梦境迷离
/
Scala Macro Tools
上一次同步 大约 1 年
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
Scala Macro Tools
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
fde941c2
编写于
12月 02, 2022
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
optimize csv
Signed-off-by:
梦境迷离
<
dreamylost@outlook.com
>
上级
927d525e
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
16 addition
and
30 deletion
+16
-30
smt-csv/src/main/scala/org/bitlap/csv/FileUtils.scala
smt-csv/src/main/scala/org/bitlap/csv/FileUtils.scala
+3
-2
smt-csv/src/main/scala/org/bitlap/csv/StringUtils.scala
smt-csv/src/main/scala/org/bitlap/csv/StringUtils.scala
+4
-1
smt-csv/src/main/scala/org/bitlap/csv/internal/ReaderBuilderMacro.scala
...in/scala/org/bitlap/csv/internal/ReaderBuilderMacro.scala
+1
-1
smt-csv/src/main/scala/org/bitlap/csv/internal/WriterBuilderMacro.scala
...in/scala/org/bitlap/csv/internal/WriterBuilderMacro.scala
+2
-2
smt-csv/src/test/scala/org/bitlap/csv/test/WriterAndReaderTest.scala
.../test/scala/org/bitlap/csv/test/WriterAndReaderTest.scala
+6
-24
未找到文件。
smt-csv/src/main/scala/org/bitlap/csv/FileUtils.scala
浏览文件 @
fde941c2
...
...
@@ -45,7 +45,7 @@ object FileUtils {
resource
.
close
()
}
def
write
r
(
file
:
File
,
lines
:
List
[
String
],
format
:
CsvFormat
)
:
Boolean
=
{
def
write
(
file
:
File
,
lines
:
List
[
String
],
format
:
CsvFormat
)
:
Boolean
=
{
checkFile
(
file
)
val
bufferedWriter
=
new
BufferedWriter
(
new
OutputStreamWriter
(
new
FileOutputStream
(
file
,
format
.
append
),
format
.
encoding
)
...
...
@@ -59,6 +59,7 @@ object FileUtils {
}
else
{
r
.
println
(
line
)
}
r
.
flush
()
}
}
finally
bufferedWriter
.
close
()
...
...
@@ -66,7 +67,7 @@ object FileUtils {
}
// TODO read url
def
read
er
(
file
:
InputStream
,
format
:
CsvFormat
)
:
List
[
String
]
=
def
read
(
file
:
InputStream
,
format
:
CsvFormat
)
:
List
[
String
]
=
try
using
(
Source
.
fromInputStream
(
file
,
format
.
encoding
))
{
lines
=>
val
ls
=
if
(
format
.
ignoreHeader
)
{
...
...
smt-csv/src/main/scala/org/bitlap/csv/StringUtils.scala
浏览文件 @
fde941c2
...
...
@@ -37,7 +37,7 @@ object StringUtils {
private
val
kvr
:
Regex
=
"(.*):(.*)"
.
r
private
val
pattern
:
Pattern
=
Pattern
.
compile
(
regex
.
toString
())
def
extraJsonPairs
(
input
:
String
)
:
String
=
{
@inline
private
def
extraJsonPairs
(
input
:
String
)
:
String
=
{
val
matcher
=
pattern
.
matcher
(
input
)
while
(
matcher
.
find
)
{
val
tail
=
matcher
.
group
().
tail
.
init
...
...
@@ -49,6 +49,9 @@ object StringUtils {
null
}
def
asJsonString
[
K
,
V
](
kvs
:
Seq
[(
K
,
V
)])
:
String
=
s
"""\"{${kvs.map(kv => s"""
\
"\"${kv._1}\"\":\"\"${kv._2}\"\""""
).
mkString
(
","
)}}\
""""
def
extractJsonValues
[
T
<:
Product
](
jsonString
:
String
)(
func
:
(
String
,
String
)
=>
T
)
:
List
[
T
]
=
{
val
pairs
=
extraJsonPairs
(
jsonString
)
if
(
pairs
==
null
)
return
Nil
...
...
smt-csv/src/main/scala/org/bitlap/csv/internal/ReaderBuilderMacro.scala
浏览文件 @
fde941c2
...
...
@@ -107,7 +107,7 @@ class ReaderBuilderMacro(override val c: whitebox.Context) extends AbstractMacro
q
"""
..$getPreTree
..${getAnnoClassObject[T](clazzName, format)}
$packageName.FileUtils.read
er
($file, $format).map { ($innerLName: String) =>
$packageName.FileUtils.read($file, $format).map { ($innerLName: String) =>
$readerInstanceTermName.$innerTempTermName = ${TermName(innerLName.toString())}
$readerInstanceTermName.transform($innerLName)
}
...
...
smt-csv/src/main/scala/org/bitlap/csv/internal/WriterBuilderMacro.scala
浏览文件 @
fde941c2
...
...
@@ -46,7 +46,7 @@ class WriterBuilderMacro(override val c: whitebox.Context) extends AbstractMacro
private
val
innerTName
=
q
"_t"
private
val
innerTmpTermName
=
TermName
(
"_tt"
)
private
val
writerInstanceTermName
=
TermName
(
"_WriterInstance"
)
private
val
writerImplClassNamePrefix
=
"_
CSV
Anno$"
private
val
writerImplClassNamePrefix
=
"_
Writer
Anno$"
private
val
funcArgsTempTermName
=
TermName
(
"temp"
)
// scalafmt: { maxColumn = 400 }
...
...
@@ -101,7 +101,7 @@ class WriterBuilderMacro(override val c: whitebox.Context) extends AbstractMacro
q
"""
..$preTrees
..${getAnnoClassObject[T](customTrees, format)}
$packageName.FileUtils.write
r
($file, $ts.map { ($innerTName: $clazzName) =>
$packageName.FileUtils.write($file, $ts.map { ($innerTName: $clazzName) =>
$writerInstanceTermName.$innerTmpTermName = $innerTName
$writerInstanceTermName.transform($innerTName)
}, $format
...
...
smt-csv/src/test/scala/org/bitlap/csv/test/WriterAndReaderTest.scala
浏览文件 @
fde941c2
...
...
@@ -61,15 +61,7 @@ class WriterAndReaderTest extends AnyFlatSpec with Matchers {
ReaderBuilder
[
Metric
]
.
setField
(
_
.
dimensions
,
dims
=>
{
val
jsonElements
=
dims
.
replace
(
"\""
,
""
)
.
split
(
","
)
.
map
(
_
.
replace
(
"{"
,
""
).
replace
(
"}"
,
""
))
println
(
jsonElements
.
toList
)
val
kvs
=
jsonElements
.
map
(
f
=>
f
.
split
(
":"
)(
0
)
->
f
.
split
(
":"
)(
1
))
kvs
.
map
(
kv
=>
Dimension3
(
kv
.
_1
,
kv
.
_2
)).
toList
}
dims
=>
StringUtils
.
extractJsonValues
(
dims
)((
k
,
v
)
=>
Dimension3
(
k
,
v
))
)
.
convert
(
csv
)
)
...
...
@@ -83,8 +75,7 @@ class WriterAndReaderTest extends AnyFlatSpec with Matchers {
WriterBuilder
[
Metric
]
.
setField
(
_
.
dimensions
,
(
ds
:
List
[
Dimension3
])
=>
s
"""\"{${ds.map(kv => s"""
\
"\"${kv.key}\"\":\"\"${kv.value}\"\""""
).
mkString
(
","
)}}\
""""
(
ds
:
List
[
Dimension3
])
=>
StringUtils
.
asJsonString
(
ds
.
map
(
f
=>
f
.
key
->
f
.
value
))
)
.
convert
(
metric
.
get
)
)
...
...
@@ -103,15 +94,7 @@ class WriterAndReaderTest extends AnyFlatSpec with Matchers {
ReaderBuilder
[
Metric2
]
.
setField
[
Seq
[
Dimension3
]](
_
.
dimensions
,
dims => {
val jsonElements = dims
.replace("\"", "")
.split(",")
.map(_.replace("{", "").replace("}", ""))
println(jsonElements.toList)
val kvs = jsonElements.map(f => f.split(":")(0) -> f.split(":")(1))
kvs.map(kv => Dimension3(kv._1, kv._2)).toSeq
}
dims
=>
StringUtils
.
extractJsonValues
(
dims
)((
k
,
v
)
=>
Dimension3
(
k
,
v
))
)
.
convert
(
csv
)
)
...
...
@@ -186,8 +169,7 @@ class WriterAndReaderTest extends AnyFlatSpec with Matchers {
val
csv
=
WriterBuilder
[
Metric2
]
.
setField
(
_
.
dimensions
,
(ds: Seq[Dimension3]) =>
s"""
\
"{${ds.map(kv => s"""
\
"\"${kv.key}\"\":\"\"${kv.value}\"\""""
).
mkString
(
","
)}}\
""""
(
ds
:
Seq
[
Dimension3
])
=>
StringUtils
.
asJsonString
(
ds
.
map
(
f
=>
f
.
key
->
f
.
value
).
toList
)
)
.
convert
(
metrics
.
filter
(
_
.
isDefined
).
map
(
_
.
get
))
...
...
@@ -210,7 +192,7 @@ class WriterAndReaderTest extends AnyFlatSpec with Matchers {
WriterBuilder
[
Metric2
]
.
setField
[
Seq
[
Dimension3
]](
_
.
dimensions
,
ds =>
s"""
\
"{${ds.map(kv => s"""
\
"\"${kv.key}\"\":\"\"${kv.value}\"\""""
).
mkString
(
","
)}}\
""""
ds
=>
StringUtils
.
asJsonString
(
ds
.
map
(
f
=>
f
.
key
->
f
.
value
).
toList
)
)
.
convertTo
(
metrics
.
filter
(
_
.
isDefined
).
map
(
_
.
get
),
file
)
...
...
@@ -238,7 +220,7 @@ class WriterAndReaderTest extends AnyFlatSpec with Matchers {
WriterBuilder
[
Metric2
]
.
setField
[
Seq
[
Dimension3
]](
_
.
dimensions
,
ds =>
s"""
\
"{${ds.map(kv => s"""
\
"\"${kv.key}\"\":\"\"${kv.value}\"\""""
).
mkString
(
","
)}}\
""""
ds
=>
StringUtils
.
asJsonString
(
ds
.
map
(
f
=>
f
.
key
->
f
.
value
).
toList
)
)
// NOTE: not support pass anonymous object to convertTo method.
.
convertTo
(
metrics
.
filter
(
_
.
isDefined
).
map
(
_
.
get
),
file
)
file
.
delete
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录