Автор |
Сообщение |
Khan
Зарегистрирован: 10.05.2012
Сообщения: 29
|
Бьюсь безрезультатно вторую ночь. Пишу код, который для каждого тикера читает из текстового файла свой набор параметров. Почему-то не срабатывает 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
|
Обычно в Ами тикеры обзываются большими буквами, а у тебя в файле WMT_oct12... Попробуй преобразовать в большие буквы функцией StrToUpper |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Khan
Зарегистрирован: 10.05.2012
Сообщения: 29
|
000 писал(а): |
Обычно в Ами тикеры обзываются большими буквами, а у тебя в файле WMT_oct12... Попробуй преобразовать в большие буквы функцией StrToUpper |
Не выходит. Сейчас правильно считает tmp, т.е. для активного тикера она равна 1, для остальных 0. Если завожу StrToUpper, то получается tmp = 0, что правильно - строка уже другая. Убрал _oct12 из названия активного тикера и в файле, и в амишке - все равно не срабатывает. tmp выдает равным 1 (что правильно), но if почему-то не срабатывает, читает по очереди параметры каждого тикера и в переменных параметров остаются параметры последнего тикера, которые и идкт дальше в систему.
Уже второй код у меня, результаты которого непредсказуемо работают. Хотел купить себе амишку, теперь буду думать.
У меня система 64 бита, может амишка из-за этого глючит? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Глючит не Ами, глючат пользователи.
Вот в этой строке
Точку с запятой убери!!!!! |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Khan
Зарегистрирован: 10.05.2012
Сообщения: 29
|
000 писал(а): |
Глючит не Ами, глючат пользователи.
Вот в этой строке
Точку с запятой убери!!!!! |
Это да, отдельные пользователи глючат основательно. Спасибо, Олег !!! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Подскажите пожалуйста как проверить пустоту открытого файла. Т.е. если файл пуст, переменной 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
|
А вот тут я конкретно уперся - не могу запустить простенький счетчик номеров для ордеров.
Принцип прост - читаем номер из файла.
Если файла небыло и он только что создан - номер ордера и запись в файл "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
|
У тебя numorder - число а ты его пытаешься в файл записать. В файл можно только строку. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
А как преобразовать, вот так?
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Читаешь строку. Потом ее функцией StrToNum в число. К нему прибавляешь 1 потом это число функцией NumToSrt() обратно в строку и потом уже пихай в файл. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
000 писал(а): |
Читаешь строку. Потом ее функцией StrToNum в число. К нему прибавляешь 1 потом это число функцией NumToSrt() обратно в строку и потом уже пихай в файл. |
ерш его медь, я не знал про NumToSrt() ...
подскажи ещё пожалуйста, если файл открыт с атрибутом "a", можно заставить переписать содержимое файла, а не добавлять? или можно на лету поменять атрибут? короче нужно - прочитать содержимое, заменить его, как правильно открыть файл? или дважды под разными атрибутами?
Спасибо. |
Последний раз редактировалось: GREEN_X5 (Ср Окт 23, 2013 9:23 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
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
|
Там выше ещё спросил, посмотри пожалуйста. А насчет нельзя под "a" прочитать - очень похоже... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да хрен его знает. А зачем ты вообще его под "а" открываешь? "а" это только если надо дописать. Если надо прочитать, то "r", а если записать, то "w". По уму если открыл не так, то надо закрыть и открыть с нужным атрибутом. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Да, так и сделал, все заработало, спасибо!!! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|