第7話 エディタ

 この1時間のダイブ休みにエディタを作るぞ


 よし設計だ。

 まずは前に作った1行エディタ。

 これを組み込んでと。

 表示に行番号が要るな。

 行番号を指定して、修正、削除、挿入、この3つの機能があれば良い。


 言葉で言うのは簡単だがやるのは難しい。

 カキカキ、カキカキ。

 おっタイマーがなった。

 1時間過ぎたけど、ここで辞められない。

 くそう、食事行くのもめんどくさい。

 ネットでピザを注文した。


 カキカキ、カキカキ。

 くっ、机上じゃどうにもならない。

 ダイブインしてプログラムのバグを取らないと。


「ダイブイン」


 よし、プログラムを打ち込んでと。

 うわエラー吐かれた。

 行数から考えるにこのエラーは。


『ダイブ時間が3時間近くになりました。時間になりますと強制ダイブアウトします』


 待って。

 なんでこんなに早く時間が過ぎるの。


 この作業になんの意味があるのかな。

 恐ろしいことに簡単なエディタを作るために一週間の歳月が流れてた。

 いや、スキルアップはしたよ。

 だけども。

 これはちょっと。

 とにかく完成した。

 さっそく起動。


■ 1行エディタ.py

  種火.py

  火球.py

  火球×10.py

  火球ダブル.py

  水生成.py

  魔道具化.py

  魔道具化×100.py

  エディタ.py

  新規作成


 種火を選択。


  1行エディタ.py

■ 種火.py

  火球.py

  火球×10.py

  火球ダブル.py

  水生成.py

  魔道具化.py

  魔道具化×100.py

  エディタ.py

  新規作成

動作モードを入力して下さい『表示』『修正』『削除』『挿入』『合計』『終了』が使えます:


 ええと、こうなって。

 表示と。


1 : print("【われは内包する、魔法規則。火球生成の命令をレベル1の火魔法に受け渡し、魔法情報を受け取れ。魔法情報にありし ものを維持せよ。種火】")

動作モードを入力して下さい『表示』『初期入力』『修正』『削除』『挿入』『終了』が使えます:


 よし使えてる。

 挿入と。


挿入箇所の番号を入れて下さい:


 こうなって。

 1番を入力。


挿入データを入れて下さい:


 とこうなったから。

 『i=1』を入れる。


1 : i=1

2 : print("【われは内包する、魔法規則。火球生成の命令をレベル1の火魔法に受け渡し、魔法情報を受け取れ。魔法情報にありし ものを維持せよ。種火】")

動作モードを入力して下さい『表示』『初期入力』『修正』『削除』『挿入』『終了』が使えます:


 うん大丈夫だ。

 ここまで来るまでに苦難の連続。

 バグが分からないからパーツごとに切り離して実行したりした。


 とにかく、前より少しだけ便利になった。


『ちょっと、1週間もなにやっているのよ』


 向日葵からメッセージが飛んできた。


『いやちょっとスキルの使い方に熱中しちゃって』

『メール読んでないの。今日はレイド戦よ』

『俺、レベルが上がってないし、でも見学しようかな』

『じゃあ、噴水の所で待ってる』


 必殺技を作る。


for i in range(0,22,1): # 22回ループ

  print("【われは内包する、魔法規則。火球生成の命令をレベル1の火魔法に受け渡し、魔法情報を受け取れ。魔法情報にありしものを飛ばせ。火球】")


 火球22連弾。

 魔力全てがすっからからんになる攻撃だ。


 こんなのでもないよりはまし。

 さあ、レイド戦いくぞ。

 噴水の所に行き。

 向日葵のアイコンを出す。

 あそこにいる。


「お待たせ」

「遅いよ。何やってたの?」

「必殺技を作ってた」


「許してあげる。もしもという時は任せてるわ。背中を預けてあげるんだから、感謝しなさいよ」

「はいはい」

「はいは一回」

「へい」


「もー、バーテックスなんか知らない」

「すねるなよ。レイド戦が終わったら打ち上げを盛大にやろう。幸い懐は温かい」

「うん、ゴチになります」


 隊列を組んで草原を抜ける。

 途中のザコはみんなで蹴散らした。

 俺は弱いので、モンスターとはやらなかった。


 やがて景色は森となり、太陽の光も届かない暗い森になった。

 雰囲気出てきたな。

 レイドボスはどんなのだろう。

――――――――――――――――――――――――

 『エディタ 0.0.1』のプログラムです。

 読み飛ばし推奨です。


import os # 機能を追加

import glob # 機能を追加

import readchar # 機能を追加


print("エディタ 0.0.1")

cursor=0


def filesdisp() : #カーソルとファイルリストの表示

  global cursor # 一応付けた

  codelist = glob.glob("*.py") # プログラムソースリストの情報を得る

  os.system('cls') # 画面のクリア

  i=0 # カウンター初期化

  if len(codelist)!=0: # リストが空でなければ

    for code in codelist: # データをひとつずつ切り出す

      if i==cursor : # カーソルと同じ

        print("■",code) # 名前の前にカーソル

      else : # カーソルの場所でなければ

        print(" ",code) # 名前の前に空白

      i+=1 # カウンターを1つ増やす

  if i==cursor : # カーソルと同じ

    print("■","新規作成") # 新規作成の前にカーソル

  else : # カーソルの場所でなければ

    print(" ","新規作成") # 新規作成の前に空白


def fileselect():

  global cursor # 一応付けた

  filesdisp()

  while 1: # 無限ループ

    mainlist = glob.glob("*.py") # 伝票データの情報を得る

    c = readchar.readkey() # キー入力

    filesdisp() # カーソルとファイルリスト表示

    if len(c)==2: # 2バイト文字

      if c[0]=="\x00": # 最初が0

        mainlist = glob.glob("*.py") # プログラムソースリストの情報を得る

        if c[1]=="H": # 上キー

          cursor-=1 # ひとつ上に

          if cursor==-1: # 画面外

            cursor=len(mainlist) # 一番下へ

        if c[1]=="P": # 下キー

          cursor+=1 # 一つ下

          if cursor==len(mainlist)+1: # 画面外

            cursor=0 # 一番上へ

        filesdisp() # カーソルとファイルリスト表示

    else : # 終わり

      if cursor==len(mainlist):

        s=input("ファイル名を入れて下さい:")+".py"

        if os.path.isfile(s)==True : # ファイルがある場合の処理

          while os.path.isfile(s)==True :

            print("そのファイルは使われています")

            s=input("ファイル名を入れて下さい:")+".py"

          return s # 処理するファイル名を返す

        else :

          return s # 処理するファイル名を返す

      else:

        return mainlist[cursor] # リストから処理するファイル名を返す

path=fileselect()


def listfread(): # リストの読み込み

  with open(path,"r") as f: # ファイルを開く

    datalist = f.readlines() # ファイルからの読み込み

  return datalist


def listfwrite(datalist): # リストの書き出し

  with open(path,"w") as f: # ファイルを開く

    for data in datalist: # リストの数だけ繰り返し

      f.write(data) # データを書き込む



def listdisplay() : # リスト表示

  datalist=listfread() # リストの読み込み

  i=1 # カウンター1行目から始まるから1

  for data in datalist: # ループ

    print(i,":",data.strip()) # 1行表示

    i+=1 # カウンターを増やす


def listinput() : # リスト入力と初期化

  s=input("データを入れて下さい。空入力で終り:") # sは文字列型変数。この場合数を入力する。

  datalist=[]

  while s!="" : # 空が入力されたら終わり。

    datalist.append(s+"\n") # 伝票数値を書き込み

    s=input("データを入れて下さい。空入力で終り:") # 数を入力する。

  listfwrite(datalist) # リストの書き出し

  listdisplay() # リストの表示


def listmodifi() : # リスト修正

  listdisplay() # リストの表示

  datalist=listfread() # リストの読み込み

  i=int(input("修正箇所の番号を入れて下さい:")) # 修正番号入力

  if i<=len(datalist) and i!=0 and len(datalist)!=0: # エラーチェック

    i-=1 # リストはゼロからなので-1する

    datalist[i]=input("修正データを入れて下さい:")+"\n" # 修正データ入力

  listfwrite(datalist) # リストの書き出し

  listdisplay() # リストの表示


def listdel() : # リストから削除

  listdisplay() # リストの表示

  datalist=listfread() # リストの読み込み

  i=int(input("削除箇所の番号を入れて下さい:")) # 削除番号入力

  if i<=len(datalist) and i!=0 and len(datalist)!=0: # エラーチェック

    i-=1 # リストはゼロからなので-1する

    del datalist[i] # データ削除

  listfwrite(datalist) # リストの書き出し

  listdisplay() # リストの表示


def listinsert() : # リストに挿入

  listdisplay() # リストの表示

  datalist=listfread() # リストの読み込み

  i=int(input("挿入箇所の番号を入れて下さい:")) # 削除番号入力

  if i<=len(datalist)+1 and i!=0 and len(datalist)!=0: # エラーチェック

    i-=1 # リストはゼロからなので-1する

    datalist.insert(i,input("挿入データを入れて下さい:")+"\n") # 挿入と挿入データ入力

  listfwrite(datalist) # リストの書き出し

  listdisplay() # リストの表示


if os.path.isfile(path)!=True : # ファイルがない場合の処理

  print("ファイルがないので初期入力します")

  listinput() # 初期入力


comstr = input("動作モードを入力して下さい『表示』『修正』『削除』『挿入』『終了』が使えます:") # コマンドを入力

while comstr!="終了" : # 終了コマンドがくるまでループ

  if comstr=="表示": # 表示コマンド?

    listdisplay() # リスト表示


  if comstr=="修正": # 修正コマンド?

    listmodifi() # 修正


  if comstr=="削除": # 削除コマンド?

    listdel() # 修正


  if comstr=="挿入": # 挿入コマンド?

    listinsert() # 挿入


  comstr = input("動作モードを入力して下さい『表示』『初期入力』『修正』『削除』『挿入』『終了』が使えます:") # コマンドを入力


  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る