Python を使用すると、次のように記述できます。
import itertools
filename = "myfile"
length = 4
with open(filename, 'r') as f:
out = ''
# get your input character by character
for c in itertools.chain.from_iterable(f):
# append it to your output buffer
out += c
# if your buffer is more than N characters, remove the first char
if len(out) > length:
out = out[1:]
# if your buffer is exactly N characters, print it out (or do something else)
if len(out) is length:
print out
# if the last iteration was less than N characters, print it out (or do something else)
if len(out) < length:
print out
file は、文字列のフル パスを含む文字列です。raw_input()
の代わりにも使えますopen()/read()
。awk を使用した優れたソリューションは確かにありますが、RTFM でその方法を説明する必要があります。
解決策が何であれ、このアルゴリズムはそれを実行するのに適した方法です。バッファには常に最大 N+1 文字と、新しい読み取り用に 1 文字しか保持しないためです。したがって、このアルゴリズムの複雑さはO(n)
、入力文字ストリームに対して線形 ( ) です。