2017-06-05 6 views
0

は、以下ループ検討:input_file_contentsの各文字についてループ「を有するn個処理するアイテムだけのn-1更新ステップ」

marker_stream = 0 
for character in input_file: 
      if character != ',': 
       marker_stream |= 1 
      marker_stream <<= 1 

を、このループは、処理ステップを行い、処理の結果を格納しますステップ(0またはビットのいずれか)をmarker_streamに入力し、次にmarker_streamを1つだけシフトして次の繰り返しに備えます。

問題は次のとおりです。入力ファイルの各文字を処理したいですが、移動するのはmarker_streamnumber of characters in the input file - 1回だけです。上のループはmarker_streamを1回何回もシフトします。

forループの後にmarker_stream >>= 1を追加できますか、現在処理中の文字がファイルの最後の文字であるかどうかを示すフラグを保持できますが、どちらの解決策もそうではありませんすばらしいです。フラグの解決策にはフラグ(yuck)が含まれており、処理ループが長くなると、余分なラインの解決策が混乱する可能性があります。

私はこの問題のより洗練された解決策を探しています。より一般的には、「処理する項目はありますが、更新手順はn-1回だけ実行したい」という問題があります。

答えて

0

ファイル内の最初の要素を別々に処理します。そのファイルをエントリの残りの部分を保持するテール付きの1エントリヘッドとして扱います。

// Process head 
entry <- readNext(inFile) 
write(entry, outFile) 

// Process tail 
while (NOT inFile.endOfFile) 
    write(separator, outFile) 
    entry <- readNext(inFile) 
    write(entry, outFile) 
endwhile 

ヘッドエントリは区切り文字の後に続きません。テールエントリはすべてセパレータに従います。ファイル内のn-1個のテールエントリとは別に1つのヘッドエントリを扱うことで、 'n-1'の効果が得られます。

関連する問題