Автор |
Сообщение |
Kolchin
Зарегистрирован: 08.06.2008
Сообщения: 4
|
Здравствуйте. Требуется прочитать из .tro файла номер зарегистрированной заявки.
Вроде ничего сложно.
Но функция обратно отдает только значение для проверки.
В функцию передаю имя файла и строку для поиска нужной заявки:
TRANS_ID=1119152600;Status=3;
Если находим эту строку, то берем из нее последние 10 символов.
Это и есть номер заявки.
Код: |
// Чтение из .tro файла номера заявки
function inputtrofile(strans,Filename) {
number=StrFormat("123");//Значение для проверки того, что фунция, что-возвращает
f=fopen(FileName,"r");
if (f) {
while (!feof(f)) {
s=fgets(f);
if (StrFind(s,strans)>0) {
number=StrRight(s,10);
}
}
fclose(f);
}
return number;
} |
Если кто-то знает в чем причина, объясните пожалуйста.
Заранее благодарен. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Странно, что не работает. Все правильно написано. Может путь к файлу указан не верно?
Проверил у себя. Взял код
Код: |
// Чтение из .tro файла номера заявки
qq = "C:/trans.tro";
q = "123";
function inputtrofile(strans,Filename)
{
number=StrFormat("123");//Значение для проверки того, что фунция, что-возвращает
f = fopen(FileName,"r");
if(f)
{
while (!feof(f))
{
s = fgets(f);
if(StrFind(s,strans)>0)
{
number = StrRight(s,10);
}
}
fclose(f);
}
return number;
}
Title = inputtrofile(q, qq);
|
Создал файл C:\trans.tro с содержанием
Цитата: |
3456778564jhsl8il484ohs
jkkfjkjdfk9898ro48yo4hlk
ahglkhkjsh123hsdfllsil;498sl;4.4j4o8yohsv
jhgka7syk3hl94u;fj;ac;
|
Запустил код и получил результат |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kolchin
Зарегистрирован: 08.06.2008
Сообщения: 4
|
Спасибо за ответ Олег. С виду вроде все должно работать.
Пути к файлу указаны верно. Строки из него читаются.
Я делал промежуточную запись в другой файл считанных строк.
Может дело в файле из которого читаю, но он создан Квиком.
На всякий случай файлик вкладываю. Если не трудно попробуй у себя из него вытянуть номер заявки в конце второй строки.
У меня функция упорно возвращает - 123, если их закомментировать, то test. Версия Амиброкер 5.0. Все остальное работает отлично
Еще один нюанс, эту функцию я вызываю из под другой функции.
Но мне кажется это роли не должно играть. Значение 123 ведь возвращается. Видимо не срабатывает условие почему-то.
Вот еще раз код:
FileNameOUT="c:/output_4.tro";
global number;
Код: |
// Чтение из .tro файла номера заявки
function inputtrofile(strans,Filename) {
number=StrFormat("123");// Значение для проверки, что функция возращает, что-то наружу
f = fopen(FileName,"r");
if(f) {
while (!feof(f)) {
s = fgets(f);
if(StrFind(s,strans)>0) {
number = StrRight(s,11);
}
}
fclose(f);
}
return number;
}
// Вызов функции
trans=("TRANS_ID=1119152600;Status=3;");
number=StrFormat("test");// Тоже для проверки, что возвращается обратно из функции
Tittle = inputtrofile(trans,FilenameOUT); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сейчас побыстрому проверил. Действительно не работает. Экспериментально установил, что в файле ему что-то не нравится, вероятно некоторые символы...
После обеда подробно посмотрю что можно сделать.
Как вариант можно пока попробовать через COM, если шаришь в этом. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kolchin
Зарегистрирован: 08.06.2008
Сообщения: 4
|
Спасибо. Я тоже грешу на файл, хотя это 100% файл Квика.
Когда из него сроки в Амиброкер читаешь и целиком пишешь в другой файлик. Между строками получаются пустые строки. Типа 1 лишний ентер. Откуда они берется не понял. В родном файле все с виду гладко. Попробую каким-нибудь редактром его поковырять.
А с СОМ не очень. Потому этот вариант очень актуален. Если его реализовать, то можно выставлять брэкет-заявки автоматом. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Заработало... Похоже дело было в подчеркивании в названии файла... А может и не в нем. Код, .tro прикладываю. Результат на картинке. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Kolchin
Зарегистрирован: 08.06.2008
Сообщения: 4
|
Олег, большое спасибо за оперативность!
Я тоже только что разобрался, начало работать.
Похоже причина была в том, что строку:
TRANS_ID=1119152600;STATUS=3;
скопировал в код Амиброкера при помощи блокнота.
Не следовало этого делать... Он чего-то путает в кодировках видимо.
Надо или в ручную забивать (не лениться )
либо что-то типа Бред 3 использовать, для редактирования текстов.
Будет наукой.
Возник еще один вопрос:
Строка о исполнении заявки записывается в .tro файл не сразу,
даже если заявка рыночная. Ожидание этой записи реализовал бесконечным циклом с условием на прерывание, если нужная запись появилась.
Способы более технически грамотные есть? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
Ожидание этой записи реализовал бесконечным циклом с условием на прерывание, если нужная запись появилась.
Способы более технически грамотные есть?
|
А фиг его знает.. Я не программист...
Вообще я такую штуку делал через ODBC. Экспортировал из Квика позиции ы БД а Ами читал. Несколько дней потестил на демо. Работало хорошо. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|