Если кому-то интересно, я взломал версию, которая поддерживает остальную часть строки (хотя она может иметь ошибки, не слишком ее тестировала).
def text2int (textnum, numwords={}):
if not numwords:
units = [
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight",
"nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "nineteen",
]
tens = ["", "", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"]
scales = ["hundred", "thousand", "million", "billion", "trillion"]
numwords["and"] = (1, 0)
for idx, word in enumerate(units): numwords[word] = (1, idx)
for idx, word in enumerate(tens): numwords[word] = (1, idx * 10)
for idx, word in enumerate(scales): numwords[word] = (10 ** (idx * 3 or 2), 0)
ordinal_words = {'first':1, 'second':2, 'third':3, 'fifth':5, 'eighth':8, 'ninth':9, 'twelfth':12}
ordinal_endings = [('ieth', 'y'), ('th', '')]
textnum = textnum.replace('-', ' ')
current = result = 0
curstring = ""
onnumber = False
for word in textnum.split():
if word in ordinal_words:
scale, increment = (1, ordinal_words[word])
current = current * scale + increment
if scale > 100:
result += current
current = 0
onnumber = True
else:
for ending, replacement in ordinal_endings:
if word.endswith(ending):
word = "%s%s" % (word[:-len(ending)], replacement)
if word not in numwords:
if onnumber:
curstring += repr(result + current) + " "
curstring += word + " "
result = current = 0
onnumber = False
else:
scale, increment = numwords[word]
current = current * scale + increment
if scale > 100:
result += current
current = 0
onnumber = True
if onnumber:
curstring += repr(result + current)
return curstring
Пример:
>>> text2int("I want fifty five hot dogs for two hundred dollars.")
I want 55 hot dogs for 200 dollars.
Могут возникнуть проблемы, если у вас есть, скажем, «200 долларов». Но это было очень грубо.
Я имел подобную проблему и смог решить ее путем возврата выполнения как так...
function my_function(){
$stmt = $this->db->prepare("EXECUTE usp_myproc ?, ?");
$stmt->bindParam(1, 'mystr', PDO::PARAM_STR);
$stmt->bindParam(2, 'mystr2', PDO::PARAM_STR);
return $stmt->execute();
}
Все, что оставляют, должно вызвать функцию с помощью переменной и затем проанализировать, сказала переменная.
$result = my_function();
можно теперь проанализировать содержание $result для нахождения информации, которую Вы ищете. Сообщите мне, помогает ли это!
не можете использовать SELECT для возврата результатов? Тогда вы можете использовать набор данных (набор результатов на php?), Чтобы забрать его? Я не знаю PHP, но в C # это довольно просто - используйте набор данных.
pretty sure PDO::exec only returns number of rows.. this would be $rs in your example
Ознакомьтесь с MSDN для получения информации о том, как правильно привязать к этому типу вызова
Ваш PHP-код, вероятно, должен быть изменен, чтобы он выглядел примерно так. Это может сработать, только если вы звоните через ODBC, что, честно говоря, является наиболее предпочтительным способом делать что-либо с SQL Server; использовать собственный клиент SQL в системах Windows и использовать драйвер ODBC FreeTDS в системах * nix:
<?php
$stmt = $this->db->prepare("{?= CALL usp_myproc}");
$stmt->bindParam(1, $retval, PDO::PARAM_STR, 32);
$rs = $stmt->execute();
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo "The return value is $retval\n";
?>
Ключевым моментом здесь является то, что возвращаемое значение может быть привязано как параметр OUT без необходимости реструктуризации хранимых процедур.
Если я правильно понимаю ваш вопрос, вам не нужно вызывать fetchAll () ...
$stmt = $this->db->prepare("EXECUTE usp_myproc ?, ?");
$stmt->bindParam(1, $mystr, PDO::PARAM_STR);
$stmt->bindParam(2, $mystr2, PDO::PARAM_STR);
$rs = $stmt->execute();
echo "The return values are: $mystr , and: $mystr2";