我有一個包含字體及其元資料的文本檔案
10 52
a 10
.oooo.
`P )88b
.oP"888
d8( 888
`Y888""8o
b 11
.o8
"888
888oooo.
d88' `88b
888 888
888 888
`Y8bod8P'
c 10
.ooooo.
d88' `"Y8
888
888 .o8
`Y8bod8P'
X 15
ooooooo ooooo
`8888 d8'
Y888..8P
`8888'
.8PY888.
d8' `888b
o888o o88888o
Y 14
oooooo oooo
`888. .8'
`888. .8'
`888.8'
`888'
888
o888o
Z 14
oooooooooooo
d'""""""d888'
.888P
d888'
.888P
d888' .P
.8888888888P
字母是大寫和小寫的。我想從檔案中取出它們并將每個字母存盤在一個串列中。因此我可以稍后使用它......
我嘗試使用過濾器……但我無法使用chunked()或widowed()因為字母是 5 或 7 行或更多行而無法將結果拆分為陣列/串列。
val romanFont = File("roman.txt").readLines().filter { it.length > 5 }
該檔案有 52 個字母……知道嗎?
uj5u.com熱心網友回復:
看起來每個字母都有 7 行。這對于 asci 字體也很有意義。每個字體字母都以一行開頭,該行以一個字母開頭,后跟一個空格和一個數字。所以我們可以通過一個簡單的正則運算式 ( ^[a-zA-Z] [0-9]{1,2})來識別這種模式。現在我們使用這些知識迭代所有行并收集 Letter-List:
val font = """
a 10
.oooo.
`P )88b
.oP"888
d8( 888
`Y888""8o
b 11
.o8
"888
888oooo.
d88' `88b
888 888
888 888
`Y8bod8P'
""".trimIndent()
fun main() {
fun String.isLetterStart() = this.matches(Regex("^[a-zA-Z] [0-9]{1,2}"))
val letters = mutableListOf<Letter>()
var lineCount = 0
var char = ""
var asciFontLetter = ""
font.lines().forEach { line ->
if (lineCount > 0) {
if (lineCount == 8) {
lineCount = 0
letters = Letter(char, asciFontLetter)
asciFontLetter = "\n"
} else {
lineCount
asciFontLetter = line "\n"
}
}
if (line.isLetterStart() && lineCount == 0) {
char = line.substringBefore(" ")
lineCount
}
}
println(letters)
}
data class Letter(val char: String, val bitmapFontLetter: String)
?? 這會列印出來
[Letter(char=a, bitmapFontLetter=
.oooo.
`P )88b
.oP"888
d8( 888
`Y888""8o
), Letter(char=b, bitmapFontLetter=
.o8
"888
888oooo.
d88' `88b
888 888
888 888
`Y8bod8P'
)]
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/334145.html
上一篇:c語言文本檔案上的fseek()
