Как насчет:
int sgn = x/fabs(x);
это должно получиться довольно хорошо.
Вот довольно дословный перевод с минимумом очевидных изменений стиля (размещение всего кода в функции с использованием строковых, а не повторных операций там, где это возможно).
import re, fileinput
def main():
for line in fileinput.input():
process = False
for nope in ('BEGIN TRANSACTION','COMMIT',
'sqlite_sequence','CREATE UNIQUE INDEX'):
if nope in line: break
else:
process = True
if not process: continue
m = re.search('CREATE TABLE "([a-z_]*)"(.*)', line)
if m:
name, sub = m.groups()
line = '''DROP TABLE IF EXISTS %(name)s;
CREATE TABLE IF NOT EXISTS %(name)s%(sub)s
'''
line = line % dict(name=name, sub=sub)
else:
m = re.search('INSERT INTO "([a-z_]*)"(.*)', line)
if m:
line = 'INSERT INTO %s%s\n' % m.groups()
line = line.replace('"', r'\"')
line = line.replace('"', "'")
line = re.sub(r"([^'])'t'(.)", r"\1THIS_IS_TRUE\2", line)
line = line.replace('THIS_IS_TRUE', '1')
line = re.sub(r"([^'])'f'(.)", r"\1THIS_IS_FALSE\2", line)
line = line.replace('THIS_IS_FALSE', '0')
line = line.replace('AUTOINCREMENT', 'AUTO_INCREMENT')
print line,
main()
Я не уверен, что так трудно понять в этом, что это требует ехидного замечания, как в вашем комментарий выше. Обратите внимание, что <>
называется ромбовидным оператором. s ///
- оператор подстановки, а //
- оператор сопоставления m //
.
Самый короткий? Тильда обозначает регулярное выражение в Perl. "импортировать ре" и идти оттуда. Единственное ключевое отличие состоит в том, что вы будете использовать \ 1 и \ 2 вместо $ 1 и $ 2 при присвоении значений, и вы будете использовать% s, когда вы заменяете совпадения регулярного выражения внутри строк.
У Safeway есть пример, в котором есть два счета:
Если у вас есть переводчик, возможно, стоит попробовать создать исходящую карту 810 для цель создания ваших собственных тестовых данных. Мне приходилось делать это много раз, когда мои торговые партнеры были не готовы или не предоставляли тестовые данные, которые я считал недостаточными для выполнения всех функций нашего процесса.
group (1), m.group (2)) .Настоящая проблема в том, знаете ли вы, как перенести базу данных? Представлен цикл поиска и замены.
Вот немного лучшая версия оригинала.
#! /usr/bin/perl
use strict;
use warnings;
use 5.010; # for s/\K//;
while( <> ){
next if m'
BEGIN TRANSACTION |
COMMIT |
sqlite_sequence |
CREATE UNIQUE INDEX
'x;
if( my($name,$sub) = m'CREATE TABLE \"([a-z_]*)\"(.*)' ){
# remove "
$sub =~ s/\"//g; #"
$_ = "DROP TABLE IF EXISTS $name;\nCREATE TABLE IF NOT EXISTS $name$sub\n";
}elsif( /INSERT INTO \"([a-z_]*)\"(.*)/ ){
$_ = "INSERT INTO $1$2\n";
# " => \"
s/\"/\\\"/g; #"
# " => '
s/\"/\'/g; #"
}else{
# '' => \'
s/\'\'/\\\'/g; #'
}
# 't' => 1
s/[^\\']\K\'t\'/1/g; #'
# 'f' => 0
s/[^\\']\K\'f\'/0/g; #'
s/AUTOINCREMENT/AUTO_INCREMENT/g;
print;
}