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



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

СообщениеДобавлено: Вс Ноя 18, 2012 8:25 am Ответить с цитатой Вернуться к началу

Бьюсь безрезультатно вторую ночь. Пишу код, который для каждого тикера читает из текстового файла свой набор параметров. Почему-то не срабатывает if, в итоге считываются парметры для всех тикеров. Почитал тут на форуме темы - вроде все также пишу.
Код:

RunType = 2;
if(RunType == 2)
   {
   of = fopen("c:\\opt_param.txt", "r");
   of1 = fopen("c:\\opt_param1.txt", "a");
   if(of)
      {
      while(!feof(of))
         {
         ParamString = fgets(of);
         tmp = StrFind(StrExtract(ParamString, 0), Name()) != 0;
         if(tmp);
            {
            Param1Def = StrToNum(StrExtract(ParamString, 1)); Param1Min = Param1Def - 1; Param1Max = Param1Def + 1; Param1Stp = 1;
            Param2Def = StrToNum(StrExtract(ParamString, 2)); Param2Min = Param2Def - 1; Param2Max = Param2Def + 1; Param2Stp = 1;
            Param3Def = StrToNum(StrExtract(ParamString, 3)); Param3Min = Param3Def - 1; Param3Max = Param3Def + 1; Param3Stp = 1;
            Param4Def = StrToNum(StrExtract(ParamString, 4)); Param4Min = Param4Def - 1; Param4Max = Param4Def + 1; Param4Stp = 1;
            Param5Def = StrToNum(StrExtract(ParamString, 5)); Param5Min = Param5Def - 1; Param5Max = Param5Def + 1; Param5Stp = 1;
            }
         }
      fclose(of);
      }
   fclose(of1);
   }


tmp и StrFind начал пользовать т.к. простое сравнение StrExtract(ParamString, 0) и Name() тоже результатов не дает.
Формат файла с параметрами (opt_param.txt) -
Код:

WMT_oct12,81,35,1,1,1
KO_oct12,86,24,6,1,6
CSCO_oct12,79,29,2,2,8
HD_oct12,52,14,1,1,2
MCD_oct12,95,37,1,1,2
BAC_oct12,62,39,2,2,4
PG_oct12,66,21,1,1,1
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Ноя 18, 2012 10:24 am Ответить с цитатой Вернуться к началу

Обычно в Ами тикеры обзываются большими буквами, а у тебя в файле WMT_oct12... Попробуй преобразовать в большие буквы функцией StrToUpper

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



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

СообщениеДобавлено: Вс Ноя 18, 2012 10:14 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Обычно в Ами тикеры обзываются большими буквами, а у тебя в файле WMT_oct12... Попробуй преобразовать в большие буквы функцией StrToUpper
Не выходит. Сейчас правильно считает tmp, т.е. для активного тикера она равна 1, для остальных 0. Если завожу StrToUpper, то получается tmp = 0, что правильно - строка уже другая. Убрал _oct12 из названия активного тикера и в файле, и в амишке - все равно не срабатывает. tmp выдает равным 1 (что правильно), но if почему-то не срабатывает, читает по очереди параметры каждого тикера и в переменных параметров остаются параметры последнего тикера, которые и идкт дальше в систему.

Уже второй код у меня, результаты которого непредсказуемо работают. Хотел купить себе амишку, теперь буду думать.

У меня система 64 бита, может амишка из-за этого глючит?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Ноя 19, 2012 1:23 am Ответить с цитатой Вернуться к началу

Глючит не Ами, глючат пользователи.
Вот в этой строке
Код:
if(tmp);

Точку с запятой убери!!!!!

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



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

СообщениеДобавлено: Пн Ноя 19, 2012 7:41 am Ответить с цитатой Вернуться к началу

000 писал(а):
Глючит не Ами, глючат пользователи.
Вот в этой строке
Код:
if(tmp);

Точку с запятой убери!!!!!
Это да, отдельные пользователи глючат основательно. Wink Спасибо, Олег !!!
Посмотреть профиль Отправить личное сообщение
GREEN_X5



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

СообщениеДобавлено: Ср Окт 23, 2013 11:36 am Ответить с цитатой Вернуться к началу

Подскажите пожалуйста как проверить пустоту открытого файла. Т.е. если файл пуст, переменной X присвоить 1.
вот так не работает

Код:
dat=0; dat = fopen(Patch+"dat.dat", "a");
if( dat ) {
   str=fgets(dat);
   Sost=StrExtract(str,0);
   Sumlots=StrToNum(StrExtract(str,1));
   if( IsNull(Sost) )   
       X = 1;
   fclose( dat );}


и правильно ли я понимаю, что если файла небыло и fopen ключом "a" его создает, то читать его содержание можно сразу, до fclose?

Спасибо.
Посмотреть профиль Отправить личное сообщение
GREEN_X5



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

СообщениеДобавлено: Ср Окт 23, 2013 8:30 pm Ответить с цитатой Вернуться к началу

А вот тут я конкретно уперся - не могу запустить простенький счетчик номеров для ордеров.

Принцип прост - читаем номер из файла.
Если файла небыло и он только что создан - номер ордера и запись в файл "1"
Если считан номер, прибавляем 1. Теперь номер для ордера 2, записываем в файл 2.

Вроде просто все, но наверное не для меня ))

вот это не работает.
Код:
//--------считываем номер и прибавляем 1 запись в файл---
   dat = fopen(Pa+"dat.dat",  "a");
   if (dat)
      {
      num=fgets(dat);
        if (num=="") {numorder=1; fputs( numorder, dat );}
           else {numorder=StrToNum(num)+1; fputs( numorder, dat );}
      fclose( dat );
      }
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Окт 23, 2013 8:49 pm Ответить с цитатой Вернуться к началу

У тебя numorder - число а ты его пытаешься в файл записать. В файл можно только строку.

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



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

СообщениеДобавлено: Ср Окт 23, 2013 9:01 pm Ответить с цитатой Вернуться к началу

А как преобразовать, вот так?

Код:
A=B+"";
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Окт 23, 2013 9:12 pm Ответить с цитатой Вернуться к началу

Читаешь строку. Потом ее функцией StrToNum в число. К нему прибавляешь 1 потом это число функцией NumToSrt() обратно в строку и потом уже пихай в файл.

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



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

СообщениеДобавлено: Ср Окт 23, 2013 9:21 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Читаешь строку. Потом ее функцией StrToNum в число. К нему прибавляешь 1 потом это число функцией NumToSrt() обратно в строку и потом уже пихай в файл.

ерш его медь, я не знал про NumToSrt() ...
подскажи ещё пожалуйста, если файл открыт с атрибутом "a", можно заставить переписать содержимое файла, а не добавлять? или можно на лету поменять атрибут? короче нужно - прочитать содержимое, заменить его, как правильно открыть файл? или дважды под разными атрибутами?
Спасибо.


Последний раз редактировалось: GREEN_X5 (Ср Окт 23, 2013 9:23 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Окт 23, 2013 9:21 pm Ответить с цитатой Вернуться к началу

GREEN_X5 писал(а):
А вот тут я конкретно уперся - не могу запустить простенький счетчик номеров для ордеров.

Принцип прост - читаем номер из файла.
Если файла небыло и он только что создан - номер ордера и запись в файл "1"
Если считан номер, прибавляем 1. Теперь номер для ордера 2, записываем в файл 2.

Вроде просто все, но наверное не для меня ))

вот это не работает.
Код:
//--------считываем номер и прибавляем 1 запись в файл---
   dat = fopen(Pa+"dat.dat",  "a");
   if (dat)
      {
      num=fgets(dat);
        if (num=="") {numorder=1; fputs( numorder, dat );}
           else {numorder=StrToNum(num)+1; fputs( numorder, dat );}
      fclose( dat );
      }

Если не ошибаюсь (пока не досуг проверить), то открывая файл для дополнения ("а") ты сразу попадаешь в его конец и разумеется ничего ты оттуда прочитать не сможешь.

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



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

СообщениеДобавлено: Ср Окт 23, 2013 9:24 pm Ответить с цитатой Вернуться к началу

Там выше ещё спросил, посмотри пожалуйста. А насчет нельзя под "a" прочитать - очень похоже...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Окт 23, 2013 9:56 pm Ответить с цитатой Вернуться к началу

Да хрен его знает. А зачем ты вообще его под "а" открываешь? "а" это только если надо дописать. Если надо прочитать, то "r", а если записать, то "w". По уму если открыл не так, то надо закрыть и открыть с нужным атрибутом.

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



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

СообщениеДобавлено: Ср Окт 23, 2013 10:04 pm Ответить с цитатой Вернуться к началу

Да, так и сделал, все заработало, спасибо!!!
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen