Frage

Ich habe eine TXT-Datei wie:

Symbols from __ctype_tab.o:

Name                  Value   Class        Type         Size     Line  Section

__ctype             |00000000|   D  |       OBJECT   |00000004|     |.data
__ctype_tab         |00000000|   r  |       OBJECT   |00000101|     |.rodata


Symbols from _ashldi3.o:

Name                  Value   Class        Type         Size     Line  Section

__ashldi3           |00000000|   T  |       FUNC      |00000050|     |.text

Wie kann ich diese Datei ParsR und die Funktionen mit Typ FUNK bekommen? Auch aus diesem txt, wie kann ich analysieren und .o Namen extrahieren?

Wie kann ich sie durch spaltenweise Parsing oder sonst wie.

Ich brauche sofort Hilfe ... Warten auf eine geeignete Lösung wie üblich

War es hilfreich?

Lösung

ich denke, das weniger kosten könnte als die Verwendung von regulären Ausdrücken, obwohl ich auf nicht ganz klar bin, was Sie versuchen zu erreichen

symbolList=[]
for line in open('datafile.txt','r'):
if '.o' in line:
    tempname=line.split()[-1][0:-2]
            pass

if 'FUNC' not in line:
    pass

else:
    symbolList.append((tempname,line.split('|')[0]))

Ich habe von anderen Beiträgen gelernt, es billiger und besser ist, alle Daten, einpacken, wenn Sie durch eine Datei zum ersten Mal lesen. Wenn Sie also das gesamte Daten-Datei in einem Durchgang einpacken wollten, dann könnten Sie die folgende stattdessen tun

fullDict={}
for line in open('datafile.txt','r'):
    if '.o' in line:
        tempname=line.split()[-1][0:-2]
    if '|' not in line:
        pass
    else:
        tempDict={}
            dataList=[dataItem.strip() for dataItem in line.strip().split('|')]
            name=dataList[0].strip()
            tempDict['Value']=dataList[1]
            tempDict['Class']=dataList[2]
            tempDict['Type']=dataList[3]
            tempDict['Size']=dataList[4]
            tempDict['Line']=dataList[5]
            tempDict['Section']=dataList[6]
            tempDict['o.name']=tempname
            fullDict[name]=tempDict
            tempDict={}

Dann, wenn Sie den Func-Typen mögen Sie folgende verwenden würden:

funcDict={}
for record in fullDict:
    if fullDict[record]['Type']=='FUNC':
        funcDict[record]=fullDict[record]

Leider so obsessiv für zu sein, aber ich versuche, auf die Schaffung von Listenkomprehensionen besser in den Griff zu bekommen, und ich beschlossen, dass dies verdient ein Schuss

Andere Tipps

for line in open('thefile.txt'):
  fields = line.split('|')
  if len(fields) < 4: continue
  if fields[3].trim() != 'FUNC': continue
  dowhateveryouwishwith(line, fields)

Hier ist ein grundlegender Ansatz. Was denken Sie?

# Suppose you have filename "thefile.txt"
import re

obj = ''
for line in file('thefile.txt'):
    # Checking for the .o file
    match = re.search('Symbols from (.*):', line)
    if match:
        obj = match.groups()[0]

    # Checking for the symbols.
    if re.search('|', line):
        columns = [x.strip() for x in a.split('|')]
        if columns[3] == 'FUNC':
            print 'File %s has a FUNC named %s' % (obj, columns[0])
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top