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

问题描述 投票:-1回答:1

我有这样的文本文件

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  

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

python vba shell
1个回答
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
© www.soinside.com 2019 - 2024. All rights reserved.