Git hub: ascii-based-floor-map-to-csv
CCCCC..BBBB..AAAAAAA
C..................A
C.FFF..EEEE..DDDDD.A
C.FFF..EEEE..DDDDD.A
C..................A
CCCCC........AAAAAAA
CHAR X Y
C 0 0
C 1 0
C 2 0
C 3 0
C 4 0
B 7 0
「 そんなツール もうあるんじゃないの?
rogue ascii map csv
で検索してみましょう」
(カタカタカタ)
「 JSON形式のは出てくるんだけどな☆
大した機能は要らないんだぜ☆ Python3 で自力実装してしまおう☆」
「 2時間探して見つからないのなら 自力実装した方が早いもんな☆」
#
# Note.
#
# Root directory: Visual studio code workspace root.
#
file_name = "./ascii-floor-map-to-csv/data/floor-map.txt"
try:
file = open(file_name)
lines = file.readlines()
for line in lines:
print(line, end="")
except Exception as e:
print(e)
finally:
file.close()
CCCCC..BBBB..AAAAAAA
C..................A
C.FFF..EEEE..DDDDD.A
C.FFF..EEEE..DDDDD.A
C..................A
CCCCC........AAAAAAA
「 文字列を先頭から1文字ずつ 順番に読むことはできる☆?」
#
# Note.
#
# Root directory: Visual studio code workspace root.
#
file_name = "./ascii-floor-map-to-csv/data/floor-map.txt"
try:
file = open(file_name)
lines = file.readlines()
for line in lines:
for char in line:
print(char)
print("[new line]")
except Exception as e:
print(e)
finally:
file.close()
「 for文で十分なようだぜ☆ 行末に CR-LF が出てくるんだが☆」
【Python入門】for文でデータのindexを取得する方法
「 イネムリー(enumerate)という関数を使うとインデックスを取得しながら for文を回せるらしいぜ☆
あとで使ってみよ……☆」
#
# Note.
#
# Root directory: Visual studio code workspace root.
#
file_name = "./ascii-floor-map-to-csv/data/floor-map.txt"
try:
file = open(file_name)
lines = file.readlines()
for y, line in enumerate(lines):
for x, char in enumerate(line):
print("({},{}) {}".format(x, y, char))
print("[new line]")
except Exception as e:
print(e)
finally:
file.close()
(0,0) C
(1,0) C
(2,0) C
(3,0) C
(4,0) C
(5,0) .
(6,0) .
(7,0) B
(8,0) B
(9,0) B
(10,0) B
(11,0) .
「 いい感じだぜ☆
行で読込ながら 行で書き込めば 使用メモリも小さく抑えられるぜ☆」
「 Python3 って .writeln()
無いのかだぜ☆?
\r\n
を書くと改行2つ入るしな……☆ \n
にしとくのが無難かだぜ☆?
こんなん残ってるとか なんか C言語 みたいだな……☆」
input
CCCCC..BBBB..AAAAAAA
C..................A
C.FFF..EEEE..DDDDD.A
C.FFF..EEEE..DDDDD.A
C..................A
CCCCC........AAAAAAA
program
#
# Note.
#
# Root directory: Visual studio code workspace root.
#
input_file_name = "./ascii-floor-map-to-csv/data/floor-map.txt"
output_file_name = "./ascii-floor-map-to-csv/data/floor-map.csv"
try:
in_file = open(input_file_name)
try:
out_file = open(output_file_name, 'w', encoding='utf-8')
out_file.write("X,Y,CHAR\n")
lines = in_file.readlines()
for y, line in enumerate(lines):
for x, char in enumerate(line):
if char != '\n':
out_file.write("{},{},{}\n".format(x, y, char))
except Exception as e:
print(e)
finally:
out_file.close()
except Exception as e:
print(e)
finally:
in_file.close()
print("Info : Finished.")
output
X,Y,CHAR
0,0,C
1,0,C
2,0,C
3,0,C
4,0,C
5,0,.
6,0,.
7,0,B
8,0,B
9,0,B
10,0,B
11,0,.
12,0,.
13,0,A
14,0,A
15,0,A
16,0,A
17,0,A
18,0,A
19,0,A
0,1,C
1,1,.
2,1,.
3,1,.
4,1,.
5,1,.
6,1,.
7,1,.
8,1,.
9,1,.
10,1,.
11,1,.
12,1,.
13,1,.
14,1,.
15,1,.
16,1,.
17,1,.
18,1,.
19,1,A
0,2,C
1,2,.
2,2,F
3,2,F
4,2,F
5,2,.
6,2,.
7,2,E
8,2,E
9,2,E
10,2,E
11,2,.
12,2,.
13,2,D
14,2,D
15,2,D
16,2,D
17,2,D
18,2,.
19,2,A
0,3,C
1,3,.
2,3,F
3,3,F
4,3,F
5,3,.
6,3,.
7,3,E
8,3,E
9,3,E
10,3,E
11,3,.
12,3,.
13,3,D
14,3,D
15,3,D
16,3,D
17,3,D
18,3,.
19,3,A
0,4,C
1,4,.
2,4,.
3,4,.
4,4,.
5,4,.
6,4,.
7,4,.
8,4,.
9,4,.
10,4,.
11,4,.
12,4,.
13,4,.
14,4,.
15,4,.
16,4,.
17,4,.
18,4,.
19,4,A
0,5,C
1,5,C
2,5,C
3,5,C
4,5,C
5,5,.
6,5,.
7,5,.
8,5,.
9,5,.
10,5,.
11,5,.
12,5,.
13,5,A
14,5,A
15,5,A
16,5,A
17,5,A
18,5,A
19,5,A
C,C,C,C,C,.,.,B,B,B,B,.,.,A,A,A,A,A,A,A
C,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,A
C,.,F,F,F,.,.,E,E,E,E,.,.,D,D,D,D,D,.,A
C,.,F,F,F,.,.,E,E,E,E,.,.,D,D,D,D,D,.,A
C,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,.,A
C,C,C,C,C,.,.,.,.,.,.,.,.,A,A,A,A,A,A,A
「 じゃあ カンマで区切って、数を入れていくかだぜ☆
ブロックごとに 1スタートで振るかだぜ☆?」
「 ID は 通し でいいのでは☆?
座席番号は フィールドで☆」
5, 4, 3, 2, 1, 0, 0, 4, 3, 2, 1, 0, 0,18,17,16,15,14,13,12
6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,11
7, 0, 3, 2, 1, 0, 0, 4, 3, 2, 1, 0, 0, 5, 4, 3, 2, 1, 0,10
8, 0, 4, 5, 6, 0, 0, 5, 6, 7, 8, 0, 0, 6, 7, 8, 9,10, 0, 9
9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8
10,11,12,13,14, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7
27,26,25,24,23, 0, 0,22,21,20,19, 0, 0,18,17,16,15,14,13,12
28, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,11
29, 0,57,56,55, 0, 0,50,49,48,47, 0, 0,41,40,39,38,37, 0,10
30, 0,58,59,60, 0, 0,51,52,53,54, 0, 0,42,43,44,45,46, 0, 9
31, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8
32,33,34,35,36, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7
「 かたや Rogue形式、かたや CSV形式、ループで一緒に できないな……☆」
「 なんでも 1回で 片付けようとするなだぜ☆
2回に分けてできるのなら、2回でいい☆」
#
# Note.
#
# Root directory: Visual studio code workspace root.
#
block_input_file = "./ascii-floor-map-to-csv/data/floor-map.txt"
table_input_file = "./ascii-floor-map-to-csv/data/table-number-map.txt"
output_file_name = "./ascii-floor-map-to-csv/auto-generated/floor-map.csv"
try:
bl_file = open(block_input_file)
try:
ta_file = open(table_input_file)
try:
out_file = open(output_file_name, 'w', encoding='utf-8')
out_file.write("ID, X,Y,CHAR\n")
id_column = []
x_column = []
y_column = []
block_column = []
bl_lines = bl_file.readlines()
for y, line in enumerate(bl_lines):
for x, char in enumerate(line):
if char != '\n':
x_column.append(x)
y_column.append(y)
block_column.append(char)
ta_lines = ta_file.readlines()
for row in ta_lines:
cols = row.split(",")
for x, number_text in enumerate(cols):
num = int(number_text)
if num != 0:
id_column.append(num)
for i, id in enumerate(id_column):
out_file.write("{},{},{},{}\n".format(
id, x_column[i], y_column[i], block_column[i]))
except Exception as e:
print(e)
finally:
out_file.close()
except Exception as e:
print(e)
finally:
ta_file.close()
except Exception as e:
print(e)
finally:
bl_file.close()
print("Info : Finished.")
ID, X,Y,CHAR
27,0,0,C
26,1,0,C
25,2,0,C
24,3,0,C
23,4,0,C
22,5,0,.
21,6,0,.
20,7,0,B
19,8,0,B
18,9,0,B
17,10,0,B
16,11,0,.
「 えっ☆!? 列名の前にスペースが入ってたら 読み取り時に前スペース判定☆!?
不便なやつだな……☆」
「 参加者数が30で、机の数が60だったとき 机が30個に切れてしまうな☆」
#
# Note.
#
# Root directory: Visual studio code workspace root.
#
block_input_file = "./ascii-floor-map-to-csv/data/floor-map.txt"
table_input_file = "./ascii-floor-map-to-csv/data/table-number-map.txt"
output_file_name = "./ascii-floor-map-to-csv/auto-generated/floor-map.csv"
try:
bl_file = open(block_input_file)
try:
ta_file = open(table_input_file)
try:
out_file = open(output_file_name, 'w', encoding='utf-8')
# Column name, No space.
out_file.write("ID,X,Y,CHAR\n")
id_column = []
x_column = []
y_column = []
block_column = []
bl_lines = bl_file.readlines()
for y, line in enumerate(bl_lines):
for x, char in enumerate(line):
if char != '.' and char != '\n':
x_column.append(x)
y_column.append(y)
block_column.append(char)
ta_lines = ta_file.readlines()
for row in ta_lines:
cols = row.split(",")
for x, number_text in enumerate(cols):
num = int(number_text)
if num != 0:
id_column.append(num)
# 机の個数をベースで。
print("len(id_column ):{}".format(len(id_column)))
print("len(x_column ):{}".format(len(x_column)))
print("len(y_column ):{}".format(len(y_column)))
print("len(block_column):{}".format(len(block_column)))
for i, char in enumerate(block_column):
# print("i:{}".format(i))
out_file.write("{},{},{},{}\n".format(
id_column[i], x_column[i], y_column[i], char))
except Exception as e:
print(e)
finally:
out_file.close()
except Exception as e:
print(e)
finally:
ta_file.close()
except Exception as e:
print(e)
finally:
bl_file.close()
print("Info : Finished.")
<おわり>
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント