Файлы
Открыть два или три файла найти искомое значение заменить и закрыть.
int A,bread,B=13,C=12;
TFileStream *stream = new TFileStream("<имя файла>",fmOpenReadWrite | fmShareDenyNone );
do
{
bread=stream->Read(&A,2);
if(A==B)
{
stream->Position-=2;
stream->Write(&C,2);
}
}
while(bread==2);
delete stream;
Где A число, которое мы считываем, B - число которое мы заменяем, а C - число на которое мы заменяем. Повторить все это по мере необходимости.
Пишу на Си.
Вот, например, считываю я некоторую последовательность вида:
{{a,b,c},{1,2,3},{1},{1->a,2->b}}
И выходит что я с файла считываю с помощью fgetc() по одному символу, и начинается проверка, а вдруг это скобочка, или пробел, или тире....короче, такая запара...и путаюсь все время, и разбираться потом кому-то невесело будет и показать такое стыдно...
Наверняка же есть стандартные функции, которые считывают по словам....И, кстати, можно ли задавать там разделители, так чтобы считывались, например символы из каждого множества ({a,b,c}), и символы без "->" :/ ????
По поводу файлов. Есть у меня смутное /*хехе*/ предположение, что криво я все делаю...P(
Пишу на Си.
Вот, например, считываю я некоторую последовательность вида:
{{a,b,c},{1,2,3},{1},{1->a,2->b}}
И выходит что я с файла считываю с помощью fgetc() по одному символу, и начинается проверка, а вдруг это скобочка, или пробел, или тире....короче, такая запара...и путаюсь все время, и разбираться потом кому-то невесело будет и показать такое стыдно...
Наверняка же есть стандартные функции, которые считывают по словам....И, кстати, можно ли задавать там разделители, так чтобы считывались, например символы из каждого множества ({a,b,c}), и символы без "->" :/ ????
Уважаемая Фиалка. Почитай в Хелпе про fprintf(...),fscanf(...).
Уважаемая Фиалка. Почитай в Хелпе про fprintf(...),fscanf(...).
Мысль, подкупающая своей новизной...;)
Мало того что у меня древний bc 3.1, так еще файла с хелпом нема.
хотя по такому поводу я пожалуй установлю себе что-нить поприличней.
спасибо.
Мысль, подкупающая своей новизной...;)
Мало того что у меня древний bc 3.1, так еще файла с хелпом нема.
хотя по такому поводу я пожалуй установлю себе что-нить поприличней.
спасибо.
Ты права. Все старо как мир. А функции ничем не отличаются от стандартных printf и scanf.
н.п.р.
int f;
fopen(f,"sample.txt","r");
fscanf(f,"{{%d,%d,%d}}/r/n",&a,&b,&c,);
ввод строки {{1,2,3}} в переменные a,b,c, где
a = 1
b = 2
c = 3
из файла f.
int f;
fopen(f,"sample.txt","r");
fscanf(f,"{{%d,%d,%d}}/r/n",&a,&b,&c,);
ввод строки {{1,2,3}} в переменные a,b,c, где
a = 1
b = 2
c = 3
из файла f.
Обана. Супер!
Только...не факт, что у меня 3 переменных будет, значит я в сканфе не смогу указать сколько их считывать. (
Обана. Супер!
Только...не факт, что у меня 3 переменных будет, значит я в сканфе не смогу указать сколько их считывать. (
Можешь и больше. Теоретически не ограничено,на практике не знаю.
Можешь и больше. Теоретически не ограничено,на практике не знаю.
Так, блин, у меня файл, где куча таких множеств...И в каждом разное количество переменных, и я не знаю сколько их пока не считаю.:{
Так, блин, у меня файл, где куча таких множеств...И в каждом разное количество переменных, и я не знаю сколько их пока не считаю.:{
Тогда scanf не катит. И getch() нормальное решение.
ЗЫ: Слушай, а ты случаем не из 1С фаилы грузишь?
Тогда scanf не катит. И getch() нормальное решение.
ЗЫ: Слушай, а ты случаем не из 1С фаилы грузишь?
getch() же только по символу считывает? /*или я туплю*/
Неее, что ты...это у меня это так, учеба.
Начала париться с компиляторами. Сейчас разбираюсь с автоматами.
getch() же только по символу считывает? /*или я туплю*/
Неее, что ты...это у меня это так, учеба.
Начала париться с компиляторами. Сейчас разбираюсь с автоматами.
Ну можно через fread(&buf,size, 1,f); прочитать сразу size символов в buf и там уже с ними разбираться.
ЗЫ: Разберешься с конечными автоматами - можно смело выходить замуж:angel:
Ну можно через fread(&buf,size, 1,f); прочитать сразу size символов в buf и там уже с ними разбираться.
ЗЫ: Разберешься с конечными автоматами - можно смело выходить замуж:angel:
тебя это все еще не бесит?:angel:
Дело в том, что в файле куча таких множеств, а мне надо из них построить автомат. Я ж не знаю, какой это множество длины-то...
Похоже, что придется оставить getc().
Или буду считывать построчно и уже потом там все лишние символы выбрасывать.
Ну спасибо за советы. Если не в этой программке, то в другой они мне наверняка пригодятся...
ЗЫ. Дык...конечные, Мили, Мура (детерминированные) готовы. Я их теперь в приличный вид пытаюсь привести.
ОФФ: Респект за подпись :) Только в первом слове ошибка.
гыгыгы.
исправила.
тебя это все еще не бесит?:angel:
Дело в том, что в файле куча таких множеств, а мне надо из них построить автомат. Я ж не знаю, какой это множество длины-то...
Похоже, что придется оставить getc().
Или буду считывать построчно и уже потом там все лишние символы выбрасывать.
Ну спасибо за советы. Если не в этой программке, то в другой они мне наверняка пригодятся...
ЗЫ. Дык...конечные, Мили, Мура (детерминированные) готовы. Я их теперь в приличный вид пытаюсь привести.
{
FILE* f;
char str[256]; //буфер для чтения строки
char oper[256]; //стек операций
char arg[256]; //стек аргументов операций
int i = 0; //счетчики
int opI = 0; //операций
int opA = 0; //аргументов в операции
int op2 = 0; //для операций из двух символов
f = fopen("automat.txt","r");
if(f == NULL)
{
printf("Error an open file");
return;
}
while(!foeof(f))
{
fscanf(f,"%s",&str[0]); //читаем строчку
for(int i = 0;i<256;i++)
switch(str)
{
case '{': oper[opI++] = '{'; //начало операции в стек
break;
case '}': //конец операции, вычисляем и заполняем аргументы
//opA - количество аргументов
//сворачиваем операцию
opI--; //долой ее из стека
break;
case '-' : op2 = 1;
break;
case '>' : if (op2 == 1)
oper[opI++] = '>'; //достаточно одного симовола
else
//ошибка в входном файле
case ',' : //просто разделитель пробрасываем break;
default : //остальные символы - аргументы операций. В стек аргументов
arg[opA++] = str;
}
}
}
Это конечно не истина, а руководство к мыслительному процессу.
Это конечно не истина, а руководство к мыслительному процессу.
Спасибо, это получше моих ифов будет...:)