From d10d3dd8967c76ce34d61bf2ea980487549de4d8 Mon Sep 17 00:00:00 2001 From: emkael Date: Tue, 21 May 2019 00:47:36 +0200 Subject: BER format support --- dealconvert/formats/ber.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) (limited to 'dealconvert/formats') diff --git a/dealconvert/formats/ber.py b/dealconvert/formats/ber.py index 0303407..66c289e 100644 --- a/dealconvert/formats/ber.py +++ b/dealconvert/formats/ber.py @@ -1,6 +1,44 @@ from . import DealFormat +from .. import dto class BERFormat(DealFormat): + number_warning = 'WARNING: .ber file format assumes consequent deal numbers from 1' + cards = 'AKQJT98765432' + @property def suffix(self): return '.ber' + + def parse_content(self, content): + print self.number_warning + dealset = [] + number = 1 + while True: + deal_str = content.read(52) + if len(deal_str) > 0: + if len(deal_str) < 52: + print 'WARNING: truncated .ber input: %s' % (deal_str) + break + deal = dto.Deal() + deal.number = number + deal.dealer = deal.get_dealer(number) + deal.vulnerable = deal.get_vulnerability(number) + for suit in range(0, 4): + for card in range(0, 13): + deal.hands[int(deal_str[suit*13 + card])-1][suit].append(self.cards[card]) + dealset.append(deal) + number += 1 + else: + break + return dealset + + + def output_content(self, out_file, dealset): + print self.number_warning + for board in dealset: + deal_str = [''] * 52 + for i, hand in enumerate(board.hands): + for j, suit in enumerate(hand): + for card in suit: + deal_str[j*13 + self.cards.index(card)] = str(i + 1) + out_file.write(''.join(deal_str)) -- cgit v1.2.3