Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Чтение из .tro файла номера зарегистрированной заявки Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
Kolchin



Зарегистрирован: 08.06.2008
Сообщения: 4

СообщениеДобавлено: Пн Янв 19, 2009 6:37 pm Ответить с цитатой Вернуться к началу

Здравствуйте. Требуется прочитать из .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

СообщениеДобавлено: Вт Янв 20, 2009 12:51 am Ответить с цитатой Вернуться к началу

Странно, что не работает. Все правильно написано. Может путь к файлу указан не верно? Sad
Проверил у себя. Взял код
Код:

// Чтение из .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

СообщениеДобавлено: Вт Янв 20, 2009 10:03 am Ответить с цитатой Вернуться к началу

Спасибо за ответ Олег. С виду вроде все должно работать.
Пути к файлу указаны верно. Строки из него читаются.
Я делал промежуточную запись в другой файл считанных строк.
Может дело в файле из которого читаю, но он создан Квиком.
На всякий случай файлик вкладываю. Если не трудно попробуй у себя из него вытянуть номер заявки в конце второй строки.
У меня функция упорно возвращает - 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

СообщениеДобавлено: Вт Янв 20, 2009 10:33 am Ответить с цитатой Вернуться к началу

Сейчас побыстрому проверил. Действительно не работает. Экспериментально установил, что в файле ему что-то не нравится, вероятно некоторые символы...
После обеда подробно посмотрю что можно сделать.

Как вариант можно пока попробовать через COM, если шаришь в этом.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Kolchin



Зарегистрирован: 08.06.2008
Сообщения: 4

СообщениеДобавлено: Вт Янв 20, 2009 11:06 am Ответить с цитатой Вернуться к началу

Спасибо. Я тоже грешу на файл, хотя это 100% файл Квика.
Когда из него сроки в Амиброкер читаешь и целиком пишешь в другой файлик. Между строками получаются пустые строки. Типа 1 лишний ентер. Откуда они берется не понял. В родном файле все с виду гладко. Попробую каким-нибудь редактром его поковырять.
А с СОМ не очень. Потому этот вариант очень актуален. Если его реализовать, то можно выставлять брэкет-заявки автоматом.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Янв 20, 2009 1:22 pm Ответить с цитатой Вернуться к началу

Заработало... Похоже дело было в подчеркивании в названии файла... А может и не в нем. Код, .tro прикладываю. Результат на картинке.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Kolchin



Зарегистрирован: 08.06.2008
Сообщения: 4

СообщениеДобавлено: Вт Янв 20, 2009 1:33 pm Ответить с цитатой Вернуться к началу

Олег, большое спасибо за оперативность!
Я тоже только что разобрался, начало работать.
Похоже причина была в том, что строку:
TRANS_ID=1119152600;STATUS=3;
скопировал в код Амиброкера при помощи блокнота.
Не следовало этого делать... Он чего-то путает в кодировках видимо.
Надо или в ручную забивать (не лениться Smile)
либо что-то типа Бред 3 использовать, для редактирования текстов.
Будет наукой.

Возник еще один вопрос:
Строка о исполнении заявки записывается в .tro файл не сразу,
даже если заявка рыночная. Ожидание этой записи реализовал бесконечным циклом с условием на прерывание, если нужная запись появилась.
Способы более технически грамотные есть?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Вт Янв 20, 2009 1:41 pm Ответить с цитатой Вернуться к началу

Цитата:

Ожидание этой записи реализовал бесконечным циклом с условием на прерывание, если нужная запись появилась.
Способы более технически грамотные есть?

А фиг его знает.. Sad Я не программист...
Вообще я такую штуку делал через ODBC. Экспортировал из Квика позиции ы БД а Ами читал. Несколько дней потестил на демо. Работало хорошо.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen