在VBA/Python/Sh中实现树集数据结构的存储和读取

2024-09-30 02:30:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样的文本文件

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表示文件中存在的最大级别。 在这里,级别1很常见,但在实际数据中,有时是级别1和级别3 当最高等级是7级时会很常见。基本上没有明确的规定 预定义模式。 我已经解决了它在VBA中使用正常的数组结构,但当文件成为 非常大,最高等级变得更高(比如超过10) 它变慢了。 然后我试着读更多的东西,并开始知道使用 树集数据结构和迭代器之类的东西,它的工作速度很快。 但这在Java中是可能的。
如何在VBA中实现? 如果可能,在shell或python中也可以。你知道吗


Tags: 文件vba级别johnlevelmalefemale文本文件
1条回答
网友
1楼 · 发布于 2024-09-30 02:30:34

下面是一个小的python方法,但是非常具体地介绍了字符串格式化文本.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

相关问题 更多 >

    热门问题