Вы можете использовать побитовое значение AND
:
SELECT *
FROM tab
WHERE answer & 10 = 10
Аналогичный подход, используемый в @@ OPTIONS :
[ 118] Функция @@ OPTIONS возвращает битовый массив опций, преобразованный в целое число 10 (десятичное).
Чтобы декодировать значение @@ OPTIONS , преобразуйте целое число, возвращаемое @@ OPTIONS , в двоичный файл, а затем найдите значения в таблице в разделе Настройка параметров пользователя Настройка сервера Вариант. Например, если SELECT @@ OPTIONS; возвращает значение 5496, используйте калькулятор программиста Windows (calc.exe) для преобразования десятичного числа 5496 в двоичное. Результат - 1010101111000. Самые правые символы (двоичные 1, 2 и 4) равны 0, что указывает на то, что первые три элемента в таблице выключены.
blockquote>Проверка ANSI_NULLS
Чтобы просмотреть текущие настройки для этого параметра, выполните следующий запрос:
blockquote> [111 ]
На самом деле более легкий способ использовать fileinput состоит в том, чтобы использовать оперативный параметр:
import fileinput
for line in fileinput.input (filenameToProcess, inplace=1):
process (line)
При использовании оперативного параметра, он перенаправит stdout в файл, так, чтобы, если Вы делаете печать, она записала обратно в Ваш файл.
Этот пример добавляет номера строки к Вашему файлу:
import fileinput
for line in fileinput.input ("b.txt",inplace=1):
print "%d: %s" % (fileinput.lineno(),line),
Я пошел бы для элегантности другим путем: реализуйте свои операции чтения файла и фильтрации как генераторы, Вы запишете больше строк кода, но это будет более гибкий, удобный в сопровождении, и производительный код.
Посмотрите Приемы Генератора David M. Beazley для Системных Программистов, который является действительно важной вещью для любого, кто пишет этот вид кода для чтения.
Это, кажется, работает:
with open(filename, "r+") as f:
new_txt = process(f.read())
f.truncate(0)
f.write(new_txt)
Чтобы сделать это способом, который не съест Ваши данные, если Вы откажете в середине:
from twisted.python.filepath import FilePath
p = FilePath(filename)
p.setContent(process(p.getContent()))
При поиске Python, эквивалентного из "жемчуга - пи", вот довольно хороший:
import fileinput for line in fileinput.input(): # process line
См. http://www.python.org/doc/2.5.2/lib/module-fileinput.html для больше.
Сделанный этот путь, Вы использовали бы свой сценарий Python в канале для создания нового файла:
$ myscript.py infile.txt > outfile.txt
Мое ужасное (но короткий, как указано в вопросе) решение с выражениями генератора;
# Some setup first
file('test.txt', 'w').write('\n'.join('%05d' % i for i in range(100)))
# This is the filter function
def f(i):
return i % 3
# This is the main part
file('test2.txt', 'w').write('\n'.join(str(f(int(l))) for l in file('test.txt', 'r').readlines()))
# And a wrapper for sanity
def filter_file(infile, outfile, filter_function)
outfile.write('\n'.join(filter_function(l) for l in infile.readlines()))