from macrolib.fifDim
import fifDim
from macrolib.columnize
import columnize
import math
def round_length_next(length,
increment=1.0):
try: return float(math.ceil(length/increment) * increment)
except: return
length
def parseKSS(fn):
# initialize member dictionary
memDict
= {}
# open
f = open(fn)
# skip to first
member
s = f.next()
while s.strip() != '*':
s = f.next()
for line in f:
# Sample line:
D,101,0,101B1,101B1,1,W,18x50,A992,8791.57,, ,,
lineList
= line.strip().split(',')
memMark
= lineList[3]
memQuan
= lineList[5]
memSize
= lineList[6]+lineList[7]
memLength
= fifDim(round_length_next(float(lineList[9])/25.4, 1))
memABM
= 'N/A'
if memDict.has_key(memSize):
memDict[memSize].append([memMark, memQuan, memLength, memABM])
else:
memDict[memSize]
= [[memMark, memQuan, memLength, memABM], ]
while not line.startswith('A'):
try:
line =
f.next()
except:
f.close()
return
memDict
if line.strip() == '*': break
# proceed with iteration if not next
member
if line.strip() != '*':
# A,2-8
memABM = line.strip().split(',')[1]
memDict[memSize][-1][-1]
= memABM
# skip to
next member
while line.strip() != '*':
try:
line
= f.next()
except:
f.close()
return
memDict
if __name__ == '__main__':
sizeList =
['W12x58', 'W16x26', 'W21x44', 'W21x50', 'W21x57', 'W21x62', 'W21x93',
'W21x122', 'W24x55', 'W24x62']
abmList =
['5-15','2-31','2-32','2-33','2-34','2-35','2-1','2-2','2-3','2-4','2-5','2-6','1-46','1-47','1-48',\
'1-49','1-41','1-42','1-43','1-37','1-38','1-32','1-33','1-29','1-30','1-22','1-23','1-24','1-25',\
'1-26','1-27','1-13','1-14','1-15','1-16','1-17','1-19','1-20']
fn = r'C:\
memDict
= parseKSS(fn)
keys = memDict.keys()
keys.sort()
colWidth
= 8
print
outList
= []
markList
= []
total_quan = 0
for key in keys:
total_pcs = 0
if key in sizeList:
outList.append(columnize('Material size: %s' % key, colWidth*4,
'Center'))
header =
['Mark', 'Quantity', 'Length', '
outList.append(''.join([columnize(item, colWidth,
'Center') for item in header]))
outList.append('-'*colWidth*4)
for item
in memDict[key]:
if
item[-1] in abmList:
#if item[-1]
== 'N/A':
outList.append(''.join([columnize(s, colWidth, 'Center')
for s in item]))
markList.append(item[0])
total_pcs
+= int(item[1])
outList.append('Total pieces
of %s = %d\n' % (key, total_pcs))
total_quan
+= total_pcs
outList.append('Overall total = %d' % total_quan)
#print '\n'.join(outList)
fn = r'H:\Contract Documents\612 Toringdon VI\CharlotteMtrl.txt'
f = open(fn, 'w')
f.write('\n'.join(outList))
markList.sort()
f.write('\n\n')
f.write('\n'.join(markList))
f.close()
''' Interactive
>>>
>>> import
re
>>> patt = re.compile(r'\d{3}')
>>> patt.match('102B1').group(0)
'102'
>>> sheetList = [patt.match(s).group(0)
for s in markList]
>>> sheetList = [i
for i in sheetList if i not in locals()['_[1]'].__self__]
>>> print
'\n'.join(sheetList)
102
103
104
105
106
107
108
109
110
111
201
202
203
204
205
206
207
208
209
210
211
213
214
301
303
304
305
306
307
308
310
401
402
403
404
405
406
407
408
409
410
411
412
414
416
417
502
503
504
505
506
507
508
509
510
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
701
702
703
704
705
707
801
802
803
804
805
806
807
808
809
>>> len(sheetList)
86
>>>
'''
''' Using abmList filter
>>>
Material size: W12x58
Mark Quantity Length
--------------------------------
416C3
1 24'-4 5-15
417C1
1 24'-4 5-15
616C1
1 24'-4 5-15
Total pieces of
W12x58 = 3
Material size: W16x26
Mark Quantity Length
--------------------------------
102B4
1 9'-2 2-34
103B2
1 9'-7 2-34
104B6
1 9'-7 2-34
105B1
2 29'-11 2-31
105B2
2 29'-11 2-31
106B2
1 9'-11 2-33
107B2
1 9'-11 2-33
108B4
2 29'-11 2-31
110B6
2 9'-11 2-33
202B1
1 29'-11 2-31
203B1
1 9'-11 2-33
204B3
1 9'-7 2-34
207B2
1 29'-11 2-31
208B3
1 9'-11 2-33
208B4
1 29'-11 2-31
209B5
1 29'-11 2-31
211B2
1 9'-7 2-34
213B4
1 29'-11 2-31
214B3
1 29'-11 2-31
303B2
1 9'-11 2-33
306B4
1 9'-11 2-33
307B4
1 29'-5 2-32
308B5
1 29'-11 2-31
402B2
1 29'-11 2-31
403B4
1 29'-5 2-32
406B3
1 9'-11 2-33
407B5
2 4'-5
2-35
408B5
1 29'-11 2-31
409B4
1 29'-5 2-32
412B5
1 9'-11 2-33
504B3
1 29'-11 2-31
505B1
1 9'-11 2-33
506B4
1 9'-11 2-33
507B4
1 9'-11 2-33
507B5 1
9'-11 2-33
509B5
2 29'-11 2-31
509B6
1 29'-11 2-31
510B6
2 9'-11 2-33
603B3
1 9'-11 2-33
605B1
1 29'-11 2-31
605B2
1 29'-11 2-31
605B4
1 9'-11 2-33
608B2
1 9'-11 2-33
609B3
1 9'-11 2-33
704B1
1 9'-7 2-34
704B2
1 9'-2 2-34
704B5
1 9'-7 2-34
705B5
2 29'-11 2-31
705B6
2 29'-11 2-31
707B2
2 29'-11 2-31
801B3
1 29'-11 2-31
801B4
1 29'-11 2-31
804B4
1 29'-11 2-31
804B5
1 9'-7 2-34
806B4
1 29'-11 2-31
808B4
1 9'-7 2-34
808B5
1 29'-11 2-31
809B4
1 29'-11 2-31
Total pieces of
W16x26 = 68
Material size: W21x122
Mark Quantity Length
--------------------------------
303B4
1 43'-7 1-30
303B5
1 44'-1 1-29
Total pieces of
W21x122 = 2
Material size: W21x44
Mark Quantity Length
--------------------------------
105B3
1 29'-5 2-5
105B4
1 39'-1 2-3
105B5
1 29'-11 2-4
106B5
2 29'-11 2-4
110B1
2 29'-11 2-4
201B3
1 29'-11 2-4
202B3
1 29'-11 2-4
205B3
1 29'-11 2-4
206B4
1 29'-5 2-5
207B1
1 39'-1 2-3
207B5
1 29'-11 2-4
209B6
1 29'-11 2-4
213B3
1 29'-5 2-5
301B1
2 44'-7 2-1
301B3
4 19'-11 2-6
304B2
1 29'-11 2-4
305B1
1 29'-11 2-4
307B3
1 29'-11 2-4
307B5
1 29'-11 2-4
307B6
1 29'-11 2-4
310B1 2
44'-7 2-1
401B1
1 19'-11 2-6
401B3
1 44'-7 2-1
401B5
1 44'-7 2-1
402B4
1 29'-11 2-4
404B2
1 43'-7 2-2
404B3
1 43'-7 2-2
406B4
1 19'-11 2-6
407B1
2 44'-7 2-1
407B6
2 29'-11 2-4
409B3
1 19'-11 2-6
410B3
2 44'-7 2-1
410B4
1 43'-7 2-2
410B5
1 43'-7 2-2
414B6
1 19'-11 2-6
504B4
2 44'-7 2-1
506B6
1 29'-11 2-4
508B3
1 29'-11 2-4
508B4
4 19'-11 2-6
509B2
2 29'-11 2-4
510B3
2 44'-7 2-1
603B2
1 29'-11 2-4
604B2
1 19'-11 2-6
604B4
1 44'-7 2-1
604B5
1 29'-11 2-4
605B3
1 44'-7 2-1
607B2
1 29'-11 2-4
608B1
1 19'-11 2-6
609B1
1 19'-11 2-6
612B6
1 19'-11 2-6
614B1
1 29'-11 2-4
701B3 1
29'-5 2-5
703B4
1 39'-1 2-3
704B4
1 29'-11 2-4
704B6
1 29'-11 2-4
801B2
1 29'-5 2-5
802B2
1 29'-11 2-4
803B1
1 39'-1 2-3
805B1
1 29'-11 2-4
808B2
1 29'-5 2-5
Total pieces of
W21x44 = 76
Material size: W21x50
Mark Quantity Length
--------------------------------
102B1
1 39'-1 1-47
214B1
1 39'-1 1-47
306B5
1 44'-1 1-46
404B1
1 44'-1 1-46
405B5
1 29'-4 1-49
408B2
1 29'-5 1-49
408B3
1 29'-11 1-48
504B2
1 44'-1 1-46
607B4
1 44'-1 1-46
613B2
1 44'-0 1-46
705B4
1 39'-1 1-47
808B3
1 39'-1 1-47
Total pieces of
W21x50 = 12
Material size: W21x57
Mark Quantity Length
--------------------------------
303B3
1 44'-1 1-42
411B2
1 44'-6 1-41
412B1
1 43'-7 1-43
412B4
1 44'-6 1-41
412B6
1 44'-1 1-42
504B1
1 44'-1 1-42
611B6
1 44'-6 1-41
613B3
1 44'-6 1-41
Total pieces of
W21x57 = 8
Material size: W21x62
Mark Quantity Length
--------------------------------
308B1
1 43'-7 1-38
308B2
1 43'-7 1-38
308B3
1 44'-1 1-37
403B2
1 43'-7 1-38
403B3
1 44'-1 1-37
406B2
1 44'-1 1-37
505B3
1 44'-1 1-37
606B1
1 44'-1 1-37
Total pieces of
W21x62 = 8
Material size: W21x93
Mark Quantity Length
--------------------------------
305B3
1 43'-7 1-33
305B4
1 43'-7 1-33
307B1
1 43'-7 1-33
307B2
1 44'-1 1-32
Total pieces of
W21x93 = 4
Material size: W24x55
Mark Quantity Length
--------------------------------
111B2
3 29'-11 1-26
203B3
1 29'-11 1-26
210B2
1 29'-11 1-26
213B1
1 39'-1 1-24
213B2
1 38'-8 1-25
214B4
1 39'-1 1-24
214B6
2 39'-7 1-23
305B2
1 29'-11 1-26
306B2
1 29'-11 1-26
306B3
1 29'-5 1-27
402B5
1 29'-11 1-26
403B1
1 29'-5 1-27
410B6
1 39'-7 1-23
411B6
1 44'-1 1-22
505B2
1 29'-11 1-26
506B1
1 29'-11 1-26
610B2
1 29'-11 1-26
610B4
1 39'-1 1-24
610B5
1 44'-1 1-22
611B5
1 39'-7 1-23
612B1
1 39'-1 1-24
612B2
1 38'-8 1-25
613B1
1 39'-1 1-24
615B2
2 39'-7 1-23
702B1
2 29'-11 1-26
806B1
1 29'-11 1-26
806B5
1 29'-11 1-26
807B3
1 39'-1 1-24
Total pieces of
W24x55 = 33
Material size: W24x62
Mark Quantity Length
--------------------------------
104B2
1 29'-5 1-16
104B3
1 9'-8 1-20
106B1
1 29'-11 1-15
106B3
1 29'-11 1-15
109B3
2 29'-11 1-15
204B5
1 29'-11 1-15
208B2
1 29'-11 1-15
211B1
1 38'-7 1-14
411B3
1 39'-1 1-13
502B1
1 28'-10 1-17
503B1
1 28'-10 1-17
508B1
2 29'-11 1-15
601B2
1 28'-11 1-17
602B1
1 28'-11 1-17
606B4
1 29'-11 1-15
705B1
1 9'-8 1-20
705B2
1 29'-5 1-16
Total pieces of
W24x62 = 19
Overall total = 233
>>>
'''
''' As originally
coded:
>>>
Material size: W12x58
Mark Quantity Length
--------------------------------
115C2
1 33'-7 5-14
116C2
1 33'-7 5-14
118C2
1 33'-7 5-14
119C1
1 33'-7 5-14
416C3
1 24'-4 5-15
417C1
1 24'-4 5-15
516C1
1 33'-7 5-14
616C1
1 24'-4 5-15
709C1
1 33'-7 5-14
710C1
1 33'-7 5-14
710C2
1 33'-7 5-14
Material size: W16x26
Mark Quantity Length
--------------------------------
102B4
1 9'-2 2-34
103B2
1 9'-7
2-34
104B6
1 9'-7 2-34
105B1
2 29'-11 2-31
105B2
2 29'-11 2-31
106B2
1 9'-11 2-33
107B2
1 9'-11 2-33
108B4
2 29'-11 2-31
110B6
2 9'-11 2-33
202B1
1 29'-11 2-31
203B1
1 9'-11 2-33
204B3
1 9'-7 2-34
207B2
1 29'-11 2-31
208B3
1 9'-11 2-33
208B4
1 29'-11 2-31
209B5
1 29'-11 2-31
211B2
1 9'-7 2-34
213B4
1 29'-11 2-31
214B3
1 29'-11 2-31
303B2
1 9'-11 2-33
306B4
1 9'-11 2-33
307B4
1 29'-5 2-32
308B5
1 29'-11 2-31
402B2
1 29'-11 2-31
403B4
1 29'-5 2-32
406B3
1 9'-11 2-33
407B5
2 4'-5 2-35
408B5
1 29'-11 2-31
409B4
1 29'-5 2-32
412B5
1 9'-11 2-33
504B3
1 29'-11 2-31
505B1
1 9'-11 2-33
506B4 1
9'-11 2-33
507B4
1 9'-11 2-33
507B5
1 9'-11 2-33
509B5
2 29'-11 2-31
509B6
1 29'-11 2-31
510B6
2 9'-11 2-33
603B3
1 9'-11 2-33
605B1
1 29'-11 2-31
605B2
1 29'-11 2-31
605B4
1 9'-11 2-33
608B2
1 9'-11 2-33
609B3
1 9'-11 2-33
704B1
1 9'-7 2-34
704B2
1 9'-2 2-34
704B5
1 9'-7 2-34
705B5
2 29'-11 2-31
705B6
2 29'-11 2-31
707B2
2 29'-11 2-31
801B3
1 29'-11 2-31
801B4
1 29'-11 2-31
804B4
1 29'-11 2-31
804B5
1 9'-7 2-34
806B4
1 29'-11 2-31
808B4
1 9'-7
2-34
808B5
1 29'-11 2-31
809B4
1 29'-11 2-31
Material size: W21x122
Mark Quantity Length
--------------------------------
303B4
1 43'-7 1-30
303B5
1 44'-1 1-29
Material size: W21x44
Mark Quantity Length
--------------------------------
105B3
1 29'-5 2-5
105B4
1 39'-1 2-3
105B5
1 29'-11 2-4
106B5
2 29'-11 2-4
110B1
2 29'-11 2-4
201B3
1 29'-11 2-4
202B3
1 29'-11 2-4
205B3
1 29'-11 2-4
206B4
1 29'-5 2-5
207B1
1 39'-1 2-3
207B5
1 29'-11 2-4
209B6
1 29'-11 2-4
213B3
1 29'-5 2-5
301B1
2 44'-7 2-1
301B3
4 19'-11 2-6
304B2
1 29'-11 2-4
305B1
1 29'-11 2-4
307B3
1 29'-11 2-4
307B5
1 29'-11 2-4
307B6
1 29'-11 2-4
310B1 2
44'-7 2-1
401B1
1 19'-11 2-6
401B3
1 44'-7 2-1
401B5
1 44'-7 2-1
402B4
1 29'-11 2-4
404B2
1 43'-7 2-2
404B3
1 43'-7 2-2
406B4
1 19'-11 2-6
407B1
2 44'-7 2-1
407B6
2 29'-11 2-4
409B3
1 19'-11 2-6
410B3
2 44'-7 2-1
410B4
1 43'-7 2-2
410B5
1 43'-7 2-2
414B6
1 19'-11 2-6
504B4
2 44'-7 2-1
506B6
1 29'-11 2-4
508B3
1 29'-11 2-4
508B4
4 19'-11 2-6
509B2
2 29'-11 2-4
510B3
2 44'-7 2-1
603B2
1 29'-11 2-4
604B2
1 19'-11 2-6
604B4
1 44'-7 2-1
604B5
1 29'-11 2-4
605B3
1 44'-7 2-1
607B2
1 29'-11 2-4
608B1
1 19'-11 2-6
609B1
1 19'-11 2-6
612B6
1 19'-11 2-6
614B1
1 29'-11 2-4
701B3 1
29'-5 2-5
703B4
1 39'-1 2-3
704B4
1 29'-11 2-4
704B6
1 29'-11 2-4
801B2
1 29'-5 2-5
802B2
1 29'-11 2-4
803B1
1 39'-1 2-3
805B1
1 29'-11 2-4
808B2
1 29'-5 2-5
Material size: W21x50
Mark Quantity Length
--------------------------------
102B1
1 39'-1 1-47
214B1
1 39'-1 1-47
306B5
1 44'-1 1-46
404B1
1 44'-1 1-46
405B5
1 29'-4 1-49
408B2
1 29'-5 1-49
408B3
1 29'-11 1-48
504B2
1 44'-1 1-46
607B4
1 44'-1 1-46
613B2
1 44'-0 1-46
705B4
1 39'-1 1-47
808B3
1 39'-1
1-47
Material size: W21x57
Mark Quantity Length
--------------------------------
303B3
1 44'-1 1-42
404B4
1 29'-11 1-44
411B2
1 44'-6 1-41
412B1
1 43'-7 1-43
412B3
1 29'-11 1-44
412B4
1 44'-6 1-41
412B6
1 44'-1 1-42
504B1
1 44'-1 1-42
611B6
1 44'-6 1-41
613B3
1 44'-6 1-41
Material size: W21x62
Mark Quantity Length
--------------------------------
204B1
1 39'-1 1-39
308B1
1 43'-7 1-38
308B2
1 43'-7 1-38
308B3
1 44'-1 1-37
403B2
1 43'-7 1-38
403B3
1 44'-1 1-37
406B2
1 44'-1
1-37
505B3
1 44'-1 1-37
606B1
1 44'-1 1-37
805B4
1 39'-1 1-39
Material size: W21x93
Mark Quantity Length
--------------------------------
305B3
1 43'-7 1-33
305B4 1
43'-7 1-33
307B1
1 43'-7 1-33
307B2
1 44'-1 1-32
Material size: W24x55
Mark Quantity Length
--------------------------------
111B2
3 29'-11 1-26
203B3
1 29'-11 1-26
210B2
1 29'-11 1-26
213B1
1 39'-1 1-24
213B2
1 38'-8 1-25
214B4
1 39'-1 1-24
214B6
2 39'-7 1-23
305B2
1 29'-11 1-26
306B2
1 29'-11 1-26
306B3
1 29'-5 1-27
402B5
1 29'-11 1-26
403B1
1 29'-5 1-27
410B6
1 39'-7 1-23
411B6
1 44'-1 1-22
505B2
1 29'-11 1-26
506B1
1 29'-11 1-26
610B2
1 29'-11 1-26
610B4
1 39'-1 1-24
610B5
1 44'-1 1-22
611B5
1 39'-7 1-23
612B1
1 39'-1 1-24
612B2
1 38'-8 1-25
613B1
1 39'-1 1-24
615B2
2 39'-7 1-23
702B1 2
29'-11 1-26
806B1
1 29'-11 1-26
806B5
1 29'-11 1-26
807B3
1 39'-1 1-24
Material size: W24x62
Mark Quantity Length
--------------------------------
104B2
1 29'-5 1-16
104B3
1 9'-8 1-20
106B1
1 29'-11 1-15
106B3
1 29'-11 1-15
109B3
2 29'-11 1-15
204B5
1 29'-11 1-15
208B2
1 29'-11 1-15
210B3
1 20'-0 1-18
211B1
1 38'-7 1-14
411B3
1 39'-1 1-13
502B1
1 28'-10 1-17
503B1
1 28'-10 1-17
508B1
2 29'-11 1-15
601B2
1 28'-11 1-17
602B1
1 28'-11 1-17
606B4
1 29'-11 1-15
705B1
1 9'-8
1-20
705B2
1 29'-5 1-16
808B1
1 20'-0 1-18
>>>
'''