Question

J'ai un fichier .txt du type:

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

Comment analyser ce fichier et obtenir les fonctions de type FUNC? Aussi, à partir de ce txt, comment puis-je analyser et extraire le nom .o?

Comment puis-je les obtenir par analyse sage des colonnes ou sinon comment.

J'ai besoin d'une aide immédiate ... En attente d'une solution appropriée, comme d'habitude

Était-ce utile?

La solution

Je pense que cela pourrait coûter moins cher que l'utilisation de regex bien que je ne sois pas tout à fait clair sur ce que vous essayez d'accomplir

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]))

J’ai appris dans d’autres publications qu’il était meilleur marché et plus avantageux de résumer toutes les données lorsque vous lisiez un fichier pour la première fois. Ainsi, si vous souhaitez résumer l’ensemble du fichier de données en un seul passage, vous pouvez alors effectuer les opérations suivantes:

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={}

Ensuite, si vous voulez le type Func, vous utiliserez les éléments suivants:

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

Désolé d'être si obsessionnel, mais j'essaie de mieux comprendre la création de listes compréhensives et j'ai décidé que cela valait le coup

Autres conseils

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

Voici une approche de base. Qu'en penses-tu?

# 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])
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top