1

Cobol 用に作成された古い Informix データベースを持っています。すべてのフィールドはコード内にあるため、SQL クエリは次のようになります。

SELECT uu00012 FROM uu0001;

これはかなり読みにくいです。

次のようなフィールド定義を含むテキストファイルがあります

uu00012 client
uu00013 date
uu00014 f_name
uu00015 l_name

コードをより英語の名前に交換したいと思います。Pythonスクリプトを実行して、英語の名前が保存されたファイルを作成してください。

これを行う最善の方法は何ですか?

4

5 に答える 5

1

各ピースが間違いなく別々の単語である場合は、re.sub間違いなくここに行く方法です:

#create a mapping of old vars to new vars.
with open('definitions') as f:
    d = dict( [x.split() for x in f] )

def my_replace(match):
    #if the match is in the dictionary, replace it, otherwise, return the match unchanged.
    return d.get( match.group(), match.group() )

with open('inquiry') as f:
    for line in f:
        print re.sub( r'\w+', my_replace, line ) 
于 2012-07-20T20:34:25.540 に答える
0
import re

f = open("dictfile.txt")

d = {}
for mapping in f.readlines():
    l, r = mapping.split(" ")
    d[re.compile(l)] = r.strip("\n")

sql = open("orig.sql")
out = file("translated.sql", "w")

for line in sql.readlines():
    for r in d.keys():
        line = r.sub(d[r], line)
    out.write(line)
于 2012-07-20T21:01:46.723 に答える
0

概念的には、

私はおそらく最初にコーディングのマッピングを構築します->英語(メモリ内またはo.

次に、マップ内の各コーディングについて、ファイルをスキャンし、対応する英語版のコードに置き換えます。

于 2012-07-20T20:35:23.240 に答える
0
infile = open('filename.txt','r')
namelist = []
for each in infile.readlines():
    namelist.append((each.split(' ')[0],each.split(' ')[1]))

これにより、キーと値のペアのリストが得られます

そこからの結果で何をしたいのかわかりませんが、もっと明確にする必要があります

于 2012-07-20T20:35:38.173 に答える
0
dictionary = '''uu00012 client
uu00013 date
uu00014 f_name
uu00015 l_name'''

dictionary = dict(map(lambda x: (x[1], x[0]), [x.split() for x in dictionary.split('\n')]))

def process_sql(sql, d):
    for k, v in d.items():
        sql = sql.replace(k, v)
    return sql

sql = process_sql('SELECT f_name FROM client;', dictionary)

ビルドdictionary:

{'date': 'uu00013', 'l_name': 'uu00015', 'f_name': 'uu00014', 'client': 'uu00012'}

次に、SQL を実行し、人間が読める値をコード化されたものに置き換えます。結果は次のとおりです。

SELECT uu00014 FROM uu00012;
于 2012-07-20T20:38:45.113 に答える