Help us understand the problem. What is going on with this article?

nimファイル操作

More than 3 years have passed since last update.

概要

nimのファイル操作関連処理をコツコツと書いていく予定

以下メモ

テキストをファイルに書き込む

import os,times
block:
  var f : File = open("members.txt" ,FileMode.fmWrite)
  defer :
    close(f)
    echo "closed"
  f.writeLine "Mr.スポック"
  f.writeLine "Mr.ビーン"
(stdout)
closed

テキストファイルを読み込む

import os,times
block:
  var f : File = open("members.txt" , FileMode.fmRead)
  defer :
    close(f)
    echo "closed"
  echo f.readLine()
  echo f.readLine()
  #echo f.readLine()
(stdout)
Mr.スポック
Mr.ビーン
closed

テキストファイルをEOFまで読み込む

import os,times
block:
  var f : File = open("members.txt" , FileMode.fmRead)
  defer :
    close(f)
    echo "closed"
  while f.endOfFile == false :
    echo f.readLine()
  #echo f.readLine()
(stdout)
Mr.スポック
Mr.ビーン
closed

テキストファイルをすべて読み込む

import os,times
block:
  var f : File = open("members.txt" , FileMode.fmRead)
  defer :
    close(f)
    echo "closed"
  echo f.readAll()
  #echo f.readLine()
(stdout)
Mr.スポック
Mr.ビーン

closed

ファイルサイズを取得する

import os,times
block:
  var f : File = open("members.txt")
  defer :
    close(f)
    echo "closed"
  echo f.getFileSize
  # こちらでも同じ
  echo getFileSize("members.txt")
  echo "members.txt".getFileSize()
(stdout)
29
29
29
closed

ファイルの日付を取得

import os,times
block:
  # 日付を利用するには、timesモジュールのimportが必要
  var ctime,mtime,ltime : Time
  ctime = getCreationTime("members.txt")
  mtime = getLastModificationTime("members.txt")
  ltime = getLastAccessTime("members.txt")
  echo ctime
  echo mtime
  echo ltime
(stdout)
Wed May 25 22:04:53 2016
Wed May 25 22:04:53 2016
Wed May 25 22:04:53 2016

ファイルの存在確認

import os,times
block:
  echo os.existsFile("members.txt")
(stdout)
true

パスの結合

import os,times
block:
  echo joinPath("/","tmp","log") == "/tmp" / "log"
(stdout)
true

パスの分割

import os,times
block:
  var parent = splitPath("usr/local/bin")
  echo parent.head
  echo parent.tail
block:
  var parent = "usr/local/bin".splitPath
  echo parent.head
  echo parent.tail
(stdout)
usr/local
bin
usr/local
bin

親ディレクトリを取得し、パスを連結

import os,times
block:
  var path = "/usr/local/bin" /../ "lib"
  echo path
(stdout)
/usr/local/lib

ファイル名の分解

import os,times
block:
  var (dir, name, ext) = splitFile("usr/local/nimc.html")
  echo dir
  echo name
  echo ext
(stdout)
usr/local
nimc
.html

パターンにマッチするファイルを取得する

import os,times
block:
  var i = 0
  for f in walkFiles("/usr/bin/z*"):
    i += 1 ; if i > 10: break # 数が多いので10個まで
    echo f
(stdout)
/usr/bin/zcat
/usr/bin/zcmp
/usr/bin/zdiff
/usr/bin/zegrep
/usr/bin/zeisstopnm
/usr/bin/zenheiset
/usr/bin/zenity
/usr/bin/zfgrep
/usr/bin/zforce
/usr/bin/zgrep

ディレクトリ内のファイルを取得する

import os,times
block:
  var i = 0
  for f in walkDir("/var/log"):
    i += 1 ; if i > 10: break # 数が多いので10個まで
    # タプルが返される
    echo f.path
(stdout)
/var/log/tallylog
/var/log/lastlog
/var/log/openlmi-install.log
/var/log/wtmp
/var/log/sssd
/var/log/samba
/var/log/httpd
/var/log/ppp
/var/log/pluto
/var/log/libvirt

再帰的にディレクトリを探索する

import os,times
block:
  var i = 0
  for f in walkDirRec("/var/log/"):
    i += 1 ; if i > 10: break # 数が多いので10個まで
    echo "recursive:" & f
(stdout)
recursive:/var/log/tallylog
recursive:/var/log/lastlog
recursive:/var/log/openlmi-install.log
recursive:/var/log/wtmp
recursive:/var/log/yum.log
recursive:/var/log/dmesg.old
recursive:/var/log/Xorg.0.log.old
recursive:/var/log/wpa_supplicant.log-20160309
recursive:/var/log/spooler-20160503
recursive:/var/log/secure-20160521

再帰的にディレクトリを探索する+ディレクトリのみ表示

import os,times
block:
  # と思ったら、pcDirではyieldしないみたい
  var i = 0
  for f in walkDirRec("/var/log/",{pcDir}):
    i += 1 ; if i > 10: break # 数が多いので10個まで
    echo "dir only:" & f
(stdout)

再帰的にディレクトリを探索する+ファイルのみ表示

import os,times
block:
  var i = 0
  for f in walkDirRec("/var/log/",{pcFile}):
    i += 1 ; if i > 10: break # 数が多いので10個まで
    echo "file only:" & f
(stdout)
file only:/var/log/tallylog
file only:/var/log/lastlog
file only:/var/log/openlmi-install.log
file only:/var/log/wtmp
file only:/var/log/yum.log
file only:/var/log/dmesg.old
file only:/var/log/Xorg.0.log.old
file only:/var/log/wpa_supplicant.log-20160309
file only:/var/log/spooler-20160503
file only:/var/log/secure-20160521

テンポラリディレクトリを取得

import os,times
block:
  echo getTempDir()
(stdout)
/tmp/

アプリケーション関連フォルダ

import os,times
block:
  # アプリケーションファイル名
  echo getApplicationFileName()
  echo getAppFileName()
  # アプリケーション実行フォルダ
  echo getApplicationDir()
  echo getAppDir()
(stdout)
/tmp/test
/tmp/test
/tmp
/tmp

2つのファイルのうちどちらが新しいか判定

import os,times
block:
  open("a.txt",FileMode.fmWrite).close
  sleep(1000)
  open("b.txt",FileMode.fmWrite).close
  # a is newer than b => false
  echo fileNewer("a.txt","b.txt")
  # b is newer than a => true
  echo fileNewer("b.txt","a.txt")
(stdout)
false
true

2つのファイルが同じかどうかをチェックする

import os,times
block:
  echo sameFileContent("members.txt","members.txt")
  echo sameFileContent("members.txt","a.txt")
(stdout)
true
false
6in
窓際エンジニアです
future
ITを武器とした課題解決型のコンサルティングサービスを提供します
http://future-architect.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした