在VBA / Python / Shell中实现treeset数据结构存储和读取

时间:2018-03-02 13:30:42

标签: python vba shell

我有一个像这样的文本文件

LEVEL=3  
LEVEL1=CLASS7  
LEVEL2=ROLLNO1  
LEVEL3=MALE  
JOHN,12   
LEVEL2=ROLLNO2  
LEVEL3=FEMALE  
JULIA,11

我们需要读取此文件并需要输出

CLASS7|ROLLNO1|MALE|JOHN|12  
CLASS7|ROLLNO2|FEMALE|JULIA|11  

第一个LELVEL = 3表示文件中存在最大LEVEL。 这里LEVEL 1很常见,但实际数据有时是1级和3级 当最大LEVEL为7时,可能是常见的。基本上没有明确的 预定义的模式。 我已经使用正常的数组结构在VBA中解决了它,但是当文件变成时 非常大和最大的LEVEL变得更多(像超过10) 它变得缓慢。 然后我尝试阅读更多内容并开始了解使用情况 treeset数据结构和迭代器类似于它快速工作的东西。 但这可能是Java中的事情 我们如何在VBA中做到这一点? 如果可能的话,在shell或python中也可以。

1 个答案:

答案 0 :(得分:0)

这里有一个小小的python方法,但非常具体的字符串格式化,“text.txt”包含你的文字:

f = open( "text.txt", 'r' )
text = f.readlines()
f.close()

d = { }
for line in text :
    pair = line.split( '=' )  
    if len( pair ) == 2 :  # save Levels as pairs in dict
        d[pair[0].strip()] = pair[1].strip()
    else : line without level means time for output
        out = []  # gather the values in here
        try :
            for i in range( 1, int( d['LEVEL'] ) + 1 ) : # number of levels (1-based)
                out.append( d['LEVEL' + str( i )] ) # add every level
        except KeyError :
            pass
        out += line.split( ',' ) # add current line
        out_as_string = '|'.join( out ) # convert to string with "|"
        print( out_as_string )

输出:

CLASS7|ROLLNO1|MALE|JOHN|12   
CLASS7|ROLLNO2|FEMALE|JULIA|11