Arimor |
Отправлено: 31 Декабря, 2020 - 14:30:13
|
Мастер
Покинул форум
Сообщений всего: 125
Дата рег-ции: Сент. 2020
Репутация: 1
|
Пытался пытался так и не хватило мозгов как добавить данные из переменной между строк.
Ниже код можно ли как то между строк text[1] и text[2] добавить новую строку? У меня почему то просто удаляется всё содержимое.
CODE:string text[100];
string path="C:\include\resource.txt"; // путь к файлу
int row=0; // переменная, в которую запишется количество строк в файле
string s="C:\include\resource2.txt";
if (fopen(path, "r" ) !=0) // если файл открылся
{
for(int i=0; freadline(text[i])!=0; i++)row++; // читаем по строке до конца файла
fclose(); // закрываем файл
if (fopen (path, "w")!=0) {
fwrite (text[0]);
fwrite (text[1]);
fwrite (s);
fwrite (text[i]);
messagebox("Cтрок в файле: "+format(row));
fclose(); // закрываем файл
// добавить путь из переменной s между text[1] и text[2]
}}
(Добавление)
в общем разобрался, если кому интересно то таким образом:
CODE:string text[100];
string path="C:\include\resource.txt"; // путь к файлу
int row=0; // переменная, в которую запишется количество строк в файле
string s="C:\include\resource2.txt";
if (fopen(path, "r" ) !=0) // если файл открылся
{
for(int i=0; freadline(text[i])!=0; i++)row++; // читаем по строке до конца файла
fclose(); // закрываем файл
messagebox("Cтрок в файле: "+format(row));
if (fopen(path, "w" ) !=0) // если файл открылся
{
fwrite (text[0]);
fwrite (ENDL);
fwrite (text[1]);
fwrite (ENDL);
fwrite (s);
fwrite (ENDL);
for(i=2; i<row; i++) // цикл для всех строк из файла
{
fwrite (text[i]);
fwrite (ENDL);
}
fclose(); // закрываем файл
}
}
(Добавление)
Но вот возникла проблема с кириллицей, как делать запись, чтобы заместо C:\Софт\ отображались русские буквы?(Отредактировано автором: 31 Декабря, 2020 - 14:35:07) |
|
|
Zireael |
Отправлено: 31 Декабря, 2020 - 15:37:32
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: чтобы заместо C:\Софт\ отображались русские буквы?
CODE:string s = "C:\Софт\";
messagebox(utf8toansi(s)); |
|
|
Karkun |
Отправлено: 23 Января, 2021 - 16:54:56
|
Участник
Покинул форум
Сообщений всего: 82
Дата рег-ции: Март 2019
Репутация: 0
|
подскажите как решить следующюю задачу. есть файл с двумерным массивом в массиве
одни нули массив записан в файл прямоугольником.
CODE:
int i=0, j=0;
int xy[100][100];
for(i=0; i<100; i++)
{
for(j=0; j<100; j++)
{
xy[j][i]=0;
fopen ("c:\1.txt", "a");
fwrite(xy[j][i]);
fclose();
}
fopen ("c:\1.txt", "a");
fwrite(ENDL);
fclose();
}
как можно поменять в этом массиве (именно в файле) часть значений при этом чтобы массив остался в прежнем виде
я пробовал так но это только добавляет в конец массива.
CODE:for(i=0; i<100; i++)
{
for(j=0; j<100; j++)//j-это у нас х на карте а i- это у
{
mousemove(j+100, i+100);
pause(100);
x=find_coordinates(j+100-27, i+100-51, j+100+24, i+100-34); //находим координату х
y=find_coordinates(j+100+32, i+100-51, j+100+27+50, i+100-34 ); //находим координату y
xy[x][y]=1; //заполняем массив карты
fopen ("c:\1.txt", "a");
fwrite(xy[x][y]);
fclose();
pause(100);
}
}]
я так понимаю нужно как то переписывать массив, но по времени это займет .....
считать массив из файла заменить что нужно, перезаписать массив то есть записывать в файл на каждом шагу смысла нету это нужно сделать по окончании всего цикла. Подскажите есть какието другие варианты?
(Добавление)
еще вопрос можно так делать
CODE:fopen ("c:\1.txt", "a");
for (i=0; i<500; i++)
{
for (j=0; j<500; j++)
{
fopen ("c:\1.txt", "a");
fread (xy[i][j]);
}
}
fclose();
или так?
CODE:for (i=0; i<500; i++)
{
for (j=0; j<500; j++)
{
fopen ("c:\1.txt", "a");
fread (xy[i][j]);
fclose();
}
}
|
|
|
Zireael |
Отправлено: 23 Января, 2021 - 18:01:14
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: есть какието другие варианты?
Создать файл (Отобразить)CODE:int i=0, j=0;
int xy[100][100];
if(fopen ("c:\1.txt", "w"))
{
for(i=0; i<100; i++)
{
for(j=0; j<100; j++)
{
xy[j][i]=0;
fwrite(xy[j][i]);
}
fwrite(ENDL);
}
fclose();
}
else messagebox("Файл не открылся");
Изменить значение (Отобразить)CODE:char array[999999];
string temp;
if(fopen ("c:\1.txt", "r")) // открыть файл для чтения
{
int count = freadb(#array[0], sizearray(array)); // прочитать файл
fclose();
messagebox("Прочитано байт: "+format(count));
messagebox("Удаление символа переноса строки");
regexreplace(-1, #temp, format(#array[0], count), "[^n^r]", ""); // удалить переносы строк
strcpy(#array[0], temp); // скопировать получившуюся строку в массив
messagebox("Осталось символов в массиве: "+format(size(#array[0])));
// 100 - количество символов в строке
// 5 - шестая строка
// 10 - одиннадцатый символ
int index = 100 * 5 + 10;
array[index] = '1'; // заменить символ на 1
// через каждые 100 символов добавить перенос строки
regexreplace(-1, #temp, format(#array[0]), "(.{100})", "$1^n");
if(fopen ("c:\1.txt", "w")) // открыть файл для записи
{
fwrite(temp); // запись получившейся строки в файл
fclose();
}
} |
|
|
Karkun |
Отправлено: 23 Января, 2021 - 22:59:34
|
Участник
Покинул форум
Сообщений всего: 82
Дата рег-ции: Март 2019
Репутация: 0
|
Это надо осознать спасибо.
пока вот так решил
CODE:int y=0, x=0, i, j;
int xy[600][600];
loadsymbolbase ("C:\Kit_B\Bases\map_1.sib");
loadsymbolbase ("C:\Проект\V_Bot\Base\map.sib");
pause(3000);
//создаем файл массива все координаты ==0 (непроходимы)
for(i=0; i<300; i++)
{
textout(1, 50, 2, "создаем строку"+ format(i)+" ", 0);
for(j=0; j<300; j++)
{
xy[j][i]=0;
}
}
// попиксельно сканируем карту считываем координаты записываем в массив проходимые клетки
for(i=0; i<20; i++)
{
for(j=0; j<20; j++)//j-это у нас х на карте а i- это у
{
x=0; y=0;
textout(1, 200, 2, "сканируем строку "+ format(i)+" ", 0);
mousemove(j+100, i+100);
pause(600);
x=find_coordinates(j+100-27, i+100-51, j+100+24, i+100-34); //находим координату х
y=find_coordinates(j+100+32, i+100-51, j+100+27+50, i+100-34 ); //находим координату y
if ((x>1)&&(y>1))
{
textout(1, 400, 2, "пишем "+format(x)+" : "+format(y)+" ", 0);
xy[x][y]=1; //заполняем массив карты
}
}
}
//записываем полученный массив
fopen ("c:\1.txt", "w");
for(i=0; i<300; i++)
{
textout(1, 300, 2, "Переписываем строку "+format(i)+" в массиве ", 0);
for(j=0; j<300; j++)
{
fwrite(xy[i][j]);
}
fwrite(ENDL);
}
fclose();
А есть возможность как то цвет текста сохраняемого в файл менять? |
|
|
Zireael |
Отправлено: 23 Января, 2021 - 23:24:06
|
Эксперт
Покинул форум
Сообщений всего: 4461
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: создаем файл массива все координаты ==0
Заполнить массив можно функцией initialarray.
Цитата: А есть возможность как то цвет текста сохраняемого в файл менять?
Тогда файл придётся открывать в каком-то редакторе, который поддерживает подсветку и формат соответствующий должен быть. |
|
|
|