007wan |
Отправлено: 02 Февраля, 2018 - 15:18:04
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Принцип: Открывает файл, через каждые 2 строчки очищает их(начиная с нулевой). Например, есть надпись:
CODE:
0 строчка//удалить
1 строчка
2 строчка
3 строчка//удалить
//и так до бесконечности.
Сразу хочу отметить строчек может быть разное количество может сделать, что бы он определял сколько строчек(что бы заполнить в массив text[n]
CODE:string text[1000];
int a=0;
loop(50)//тут проблема надо узнать сколько строчек, что бы завершить скрипт по мере конца последней строчки
{
if (fopen ("C:\Users\Home\Desktop\ÌΨ\Ìóçûêà.txt", "a")!=0)
{
fwrite(text[a+2]);
fclose();
}
}
(Добавление)
Еще такой нюанс: первая и последняя строчка должны начинаться на "0:" если это не так, то первую и последнюю удалять до тех пор пока не будет так.
(Добавление)
007wan пишет: Еще такой нюанс: первая и последняя строчка должны начинаться на "0:" нет, лучше тогда должны начинться/заканчиваться последняя/первая на любые числа и ":" |
|
|
Zireael |
Отправлено: 02 Февраля, 2018 - 15:51:14
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: тут проблема надо узнать сколько строчек
CODE:string text[1000];
string str;
if (fopen ("C:\Users\abc\Desktop\111.txt", "r")!=0) // открываем файл для чтения
{
for(int i=0; freadline(str)!=0; i++)text[i]=str; // читаем по строке до конца файла
fclose();
}
int count=i;
messagebox("Строк в файле: "+format(count));
// массив text содержит весь файл
// производим нужные действия и сохраняем в файл
messagebox("Первая строка: "+text[0]);
messagebox("Вторая строка: "+text[1]);
Цитата: Еще такой нюанс:
нет, лучше тогда
Через пару минут ещё что-то изменится? |
|
|
007wan |
Отправлено: 02 Февраля, 2018 - 16:13:31
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Еще такой нюанс:
нет, лучше тогда
Через пару минут ещё что-то изменится?Улыбка Не думаю)
(Добавление)
Zireael пишет: Цитата: тут проблема надо узнать сколько строчек
CODE:string text[1000];
string str;
if (fopen ("C:\Users\abc\Desktop\111.txt", "r")!=0) // открываем файл для чтения
{
for(int i=0; freadline(str)!=0; i++)text[i]=str; // читаем по строке до конца файла
fclose();
}
int count=i;
messagebox("Строк в файле: "+format(count));
// массив text содержит весь файл
// производим нужные действия и сохраняем в файл
messagebox("Первая строка: "+text[0]);
messagebox("Вторая строка: "+text[1]);
Цитата: Еще такой нюанс:
нет, лучше тогда
Через пару минут ещё что-то изменится?::smile24.gif::
вылетает |
|
|
Zireael |
Отправлено: 02 Февраля, 2018 - 16:24:29
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Путь к файлу на свой исправьте. Ну и лучше так:
CODE:string text[1000];
string str;
if (fopen ("C:\Users\abc\Desktop\111.txt", "r")!=0) // открываем файл для чтения
{
for(int i=0; freadline(str)!=0; i++)text[i]=str; // читаем по строке до конца файла
fclose();
int count=i;
messagebox("Строк в файле: "+format(count));
// массив text содержит весь файл
// производим нужные действия и сохраняем в файл
messagebox("Первая строка: "+text[0]);
messagebox("Вторая строка: "+text[1]);
}
(Добавление)
Цитата: тогда должны начинться/заканчиваться последняя/первая на любые числа и ":"
Нормальный пример приведите. Что есть в файле и что должно остаться. |
|
|
007wan |
Отправлено: 03 Февраля, 2018 - 09:06:37
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael пишет: Путь к файлу на свой исправьте. Ну и лучше так:
CODE:string text[1000];
string str;
if (fopen ("C:\Users\abc\Desktop\111.txt", "r")!=0) // открываем файл для чтения
{
for(int i=0; freadline(str)!=0; i++)text[i]=str; // читаем по строке до конца файла
fclose();
int count=i;
messagebox("Строк в файле: "+format(count));
// массив text содержит весь файл
// производим нужные действия и сохраняем в файл
messagebox("Первая строка: "+text[0]);
messagebox("Вторая строка: "+text[1]);
}
(Добавление)
Цитата: тогда должны начинться/заканчиваться последняя/первая на любые числа и ":"
Нормальный пример приведите. Что есть в файле и что должно остаться.
первым делом я как раз и поменял путь. и теперь работает. ПРИМЕР: в файле n количество строчек, узнали, УДАЛЯЕМ(первую строчку удаляем, а не очищаем, т.е она полностью исчезнет) и если после удаления строчки не найдено сочетание любая цифра+ символ ":", то удаляем снова и снова, пока не будет найдено, а если выполнил это условие, то пропускает еще 2 строчки и уже на 4 строчке(нулевая строчка-это первая итд..если посчитать...)не удалит ее, а ОЧИСТИТ(именно не убираем строчки, а просто очищаем ее, что бы она была пустая, но оставалась) и после этого снова пропускает 2 строчки и уже снова и снова очищает и так до бесконечности... когда находит последнюю строчку, то удаляет ее до тех пор пока не будет найдена условие любая цифра+ символ ":". |
|
|
Zireael |
Отправлено: 03 Февраля, 2018 - 19:28:19
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
code (Отобразить)CODE:string path_in="C:\Users\abc\Desktop\111.txt"; // путь к файлу
string path_out="C:\Users\abc\Desktop\222.txt"; // куда сохранить
string text[1000];
string str;
char array[500];
int _start=0, end=0, i, j;
if (fopen (path_in, "r")!=0) // открываем файл для чтения
{
for(i=0; freadline(str)!=0; i++)text[i]=str; // читаем по строке до конца файла
fclose();
//messagebox("Строк в файле: "+format(i));
// ищем первую строку, которая начинается с цифра+:
end=i; i=1; strcpy(#array[0], text[i]);
while((formatsn(format(#array[0], size(number(text[i])) )) <0 || format(#array[0+size(number(text[i]))], 1)!=formatic(58)) && i<end)
{
i++; strcpy(#array[0], text[i]);
}
_start=i;
///////////////
// ищем последнюю строку, которая начинается с цифра+:
i=end-1; strcpy(#array[0], text[i]);
while((formatsn(format(#array[0], size(number(text[i])) ))<0 || format(#array[0+size(number(text[i]))], 1)!=formatic(58)) && i>_start)
{
i--;
strcpy(#array[0], text[i]);
}
end=i+1;
// очищаем каждую вторую строку
for(j=_start+3; j<end-1; j=j+3)
{
text[j]="";
}
// записываем массив в файл
if (fopen(path_out, "w")!=0)
{
for(i=_start;i<end;i++)
{
fwrite(text[i]);
fwrite(ENDL);
}
fclose();
}
}
function number(string str) // функция ищет число в строке
{
char tmp_arr[1000];
int j=0;
string num="";
strcpy(#tmp_arr[0], str);
while(formatsn(tmp_arr[j]) > -1 && j < size(str)){num=num+tmp_arr[j];j++;}
return num;
}
Содержимое блокнота, на котором тестил (Отобразить)CODE:0 удалить
1 удалить
2: оставить, первая строка с цифра:
3 пропустить1
4: пропустить2
5: очистить
6 пропустить1
7: пропустить2
8 очистить
9 пропустить1
10: пропустить2
11: оставить, последняя строка с цифра:
12 удалить |
|
|
007wan |
Отправлено: 04 Февраля, 2018 - 14:59:08
|
Эксперт
Покинул форум
Сообщений всего: 1837
Дата рег-ции: Март 2017
Репутация: -2
|
Zireael , Не много по другому, у меня почему-то очищает весь файл.
Принцип должен быть таким:
Удалить строчку(очистить со смещением вверх) и очистить строчку(просто убираем содержимое, но она останется)
CODE:
//0 строчка(Удалить ЕСЛИ)(удаляем нулевую строчку ЕСЛИ она не содержит ЛЮБУЮ цифру(т.е все что угодно, но не это, например, любой текст), я не имею ввиду рондомную, я просто хочу сказать , что она может быть разная, т.е 1,2,3,4,5,6... . И содержит символ ":". Получается нам нужно искать в нулевой строчке сочетание, например, "3:". ЕСЛИ оно не найдено, ТО удалить эту строчку, ИНАЧЕ пропустить эту строчку+еще 2, т.е всего пропустить 3 строчки. После этой строчки должно находится такое же сочетание- Очищаем его, но не удаляем строчку.)
//1 строчка(пропустить)
//2 строчка(пропустить)
//3 строчка(очистить)
//4 строчка(пропустить)
//5 строчка(пропустить)
//6 строчка(очистить)
//7 строчка(пропустить)
//8 строчка(пропустить)
//9 строчка(очистить)
...
//804 строчка(пропустить)
//805 строчка(пропустить)
//806 строчка(очистить)
//807 строчка(предположим нашли сколько строчек и это будет конец, где будет работать скрипт. после последнего сочетания "любая цифра+ :" пропускаем 2 строчки и всё остальное удаляем)
|
|
|
Zireael |
Отправлено: 04 Февраля, 2018 - 15:56:38
|
Эксперт
Покинул форум
Сообщений всего: 4465
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Вылетает с большим количеством строк.
CODE:string text[1000]; // максимальное количество строк в файле
char array[500]; // максимальная длина строки |
|
|
|