diff --git a/ecs/jskult-batch-daily/src/batch/vjsk/vjsk_data_load_manager.py b/ecs/jskult-batch-daily/src/batch/vjsk/vjsk_data_load_manager.py index 0cc8a248..11764edf 100644 --- a/ecs/jskult-batch-daily/src/batch/vjsk/vjsk_data_load_manager.py +++ b/ecs/jskult-batch-daily/src/batch/vjsk/vjsk_data_load_manager.py @@ -91,26 +91,14 @@ class VjskDataLoadManager: # memo: UTF-8 バイトシーケンスとして、b'\n' が全角文字の一部にはならない if char == b'\n': break - # ファイル先頭のBOMを検出したらループ終了 - if char == b'\xbf': + # ファイル先頭のBOM3byte目の BF を検出したらループ終了 + # memo: UTF-8 バイトシーケンスとして、b'\xbf' が全角文字の一部の可能性がある(例:全角片仮名の「タ」) + # memo: charに代入したときのfile.read(1)によって、ファイルポインタは2→3になっている前提のロジック + if char == b'\xbf' and file.tell() == 3: break last_line = file.readline().decode('utf-8-sig').rstrip('\n') buf_count = last_line.count('\t') - # # ファイルの末尾から2バイト手前に、シーク位置を移動 - # # memo: 1byte戻るだけだと、直後のread(1)で末尾行のLFを見てしまうので、-2移動 - # file.seek(-2, os.SEEK_END) - # # 改行文字を見つけるまで逆方向に読み進める - # # memo: read(1)することでシーク位置は1byte前に進む - # while file.read(1) != b'\n': - # # シーク位置を1バイト戻って再度読み込み - # # memo: read(1)でシーク位置が1byte進んでいるので、その戻しと合わせて-2移動 - # file.seek(-2, os.SEEK_CUR) - # # 末尾行を抽出 - # last_line = file.readline().decode().rstrip('\n') - # # 末尾行に含まれるタブ文字の数を抽出 - # buf_count = last_line.count('\t') - return buf_count @classmethod