Kibor |
Отправлено: 05 Августа, 2013 - 02:24:36
|


Эксперт

Просматривает форум
Сообщений всего: 8248
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357

|
Добавлены функции для работы с текстовыми файлами. Чтение и запись.
Запись файлов Excel в формате .xlsx - Рабочий пример как записывать файлы Excel в формате .xlsx
====================================================
fopen - открывает файл. Принимает два параметра. Первый string (путь к файлу), второй string или char:
w - открыть файл для записи. Если такого файла нет он создается. Если есть он перезапишется.
a - открыть файл для записи. Если такого файла нет он создается. Если есть он будет дописываться.
r - открыть файл для чтения.
Синтаксис:
fopen ("c:\5.txt", "w");
Возвращает не 0 при удачном открытие..
====================================================
fclose - закрывает открытый файл.
Синтаксис:
fclose ();
====================================================
fwrite - записывает в открытый файл. Принимает в виде параметра string, char, double, int или ENDL - указание перевести строку.
Синтаксис:
fwrite ("Привет");
fwrite (5.25);
fwrite (ENDL);//перевести строку
fwrite ("новая строка");
====================================================
fread - читает с открытого файла. Принимает в виде параметра string, char, double, int.
Для string, double и int границами читаемого блока с файла являются начало, конец файла, пробел и перевод строки.
char читает все символы по одному считая пробелы.
Синтаксис:
int a;
fread (a);
Возвращает 1 если не конец файла, 0 если конец файла, -1 если в переменную double или int записывается не число.
====================================================
freadline - читает строку с открытого файла. Принимает в виде параметра string.
Синтаксис:
string a;
freadline (a);
Возвращает 1 если не конец файла, 0 если конец файла, -1 если в параметр не string.
====================================================
freadlineall - считывание за один вызов указанное количество строк с текстового файла или пока не будет достигнут конец файла.
Синтаксис:
CODE:freadlineall(#stroka[0], 2000000);
Параметр первый = Указатель на массив string, в который будут считываться строки
Второй - количество строк которое надо считать.
Указывать можно больше чем есть в наличие. В таком случае будет считаен весь файл и функция завершит работу.
Если в файле больше строк чем выделен массив, это приведет к ошибке в программе.
Возвращает реально прочитанное количество строк.
Пример
CODE:string slovar[500];
int k;
if (fopen ("C:\russian.txt", "r")!=0)
{
k=freadlineall(#slovar[0], 100);
fclose();
}
messagebox (k);
for (int n=0; n<k; n++)
{
messagebox (slovar[n]);
}
====================================================
Пример записи и чтения с файла
CODE://Инициализируем смешанные типы переменных
string a[8];
char b=' ';
double e=2.02;
a[0]="Демонстрация";
a[1]="записи";
a[2]="и";
a[3]="чтения";
a[4]="в";
a[5]="файл.";
a[6]="Кибор";
a[7]="версия";
//========================================================
//открываем файл для записи "w". Если файл существует он будет перезаписан.
//Для добавления в конец надо открывать с "a"
if (fopen ("c:\5.txt", "w")!=0)
{//если открылся
fwrite(a[0]);fwrite(b);//записываем в файл
fwrite(a[1]);fwrite(b);
fwrite(a[2]);fwrite(b);
fwrite(a[3]);fwrite(b);
fwrite(a[4]);fwrite(b);
fwrite(a[5]);
fwrite(ENDL);//записываем в файл перевод строки
fwrite(a[6]);fwrite(b);
fwrite(a[7]);fwrite(b);
fwrite(e);
fclose();//закрываем файл
}
//========================================================
string preiemnik_a[8];
double preiemnik_e;
//Чтение смешанными типами
if (fopen ("c:\5.txt", "r")!=0)//открываем файл для чтения "r"
{//если открылся
fread(preiemnik_a[0]);//чтение одного слова
fread(preiemnik_a[1]);
fread(preiemnik_a[2]);
fread(preiemnik_a[3]);
fread(preiemnik_a[4]);
fread(preiemnik_a[5]);
fread(preiemnik_a[6]);
fread(preiemnik_a[7]);
fread(preiemnik_e);//чтение числа double
//Вывод формотированной строки
messagebox(preiemnik_a[0]+" "+preiemnik_a[1]+" "+
preiemnik_a[2]+" "+preiemnik_a[3]+" "+
preiemnik_a[4]+" "+preiemnik_a[5]+" "+preiemnik_a[6]+" "+preiemnik_a[7]+" "+format(preiemnik_e));
fclose();//закрываем файл
}
//========================================================
string preiemnik;
//Чтение по целой строке
if (fopen ("c:\5.txt", "r")!=0)//открываем файл для чтения "r"
{//если открылся
l:if (freadline(preiemnik)!=0)//Читаем по целой строке пока не конец файла
{
messagebox(preiemnik);
goto l;
}
fclose();//закрываем файл
}
//========================================================
//Чтение по слову (пробелы пропускаются)
if (fopen ("c:\5.txt", "r")!=0)//открываем файл для чтения "r"
{//если открылся
l1:if (fread(preiemnik)!=0)
{
messagebox(preiemnik);
goto l1;
}
fclose();//закрываем файл
}
//========================================================
char pr_с;
//Чтение по символу
if (fopen ("c:\5.txt", "r")!=0)//открываем файл для чтения "r"
{//если открылся
l2:if (fread(pr_с)!=0)
{
messagebox(pr_с);
goto l2;
}
fclose();//закрываем файл
}
=======================================================================
Как открывачь для чтения и записи бинарные файлы:
Для открытия файла в бинарном режиме чтения необходимо вызвать fopen с ключом "rb".
fopen ("D:\calc.exe", "rb");
Для чтения в бинарном режиме добавлена функция freadb
Синтаксис:
char preiemnik_a[999999];
freadb(#preiemnik_a[0], 999999);
Первый параметр указатель на масив char в который будет чтение. Второй количество читаемых байт. Если файл имеет меньший размер, прочитается столько сколько имеет файл.
Значение возвращаемое - количество прочитанных байт. Если второй параметр больше размера файла - вернет количество байт равное размеру файла.
Для открытия файла в бинарном режиме записи необходимо вызвать fopen с ключом "wb" или "ab".
Для записи fwriteb
Синтаксис:
fwriteb(#preiemnik_a[0], 122465);
Первый параметр указатель на масив char данный из которого надо записать. Второй количество записываемых байт байт.
fwriteb(preiemnik_a[5]);
Параметр принимаемый - char;
Пример чтения и записи с копированием exe файла:
CODE:char preiemnik_a[999999];
int g=0;
if (fopen ("D:\calc.exe", "rb")!=0)
{
g=freadb(#preiemnik_a[0], 999999);
fclose();
}
messagebox (g);
int nn=0;
if (fopen ("D:\calc1.exe", "wb")!=0)
{
/*
r: if (nn<g)//Запись побайтово//Займет время..
{
fwriteb(preiemnik_a[nn]);
nn++;
goto r;
}
*/
fwriteb(#preiemnik_a[0], g);//Запись по указателю на масив char
fclose();
}
Пример чтения текстового файла сохраненного в юникоде
CODE:char preiemnik[999999];
int g=0;
if (fopen ("C:\Русс текст в юникоде.txt", "rb")!=0)
{
g=freadb(#preiemnik[0], 999999);
fclose();
}
string T="";
int i;
for (int n=2; n<g-1; n=n+2)
{
if (preiemnik[n]==0) goto er;
i=codhexi(#preiemnik[n], 2)-848;
if (i==-835){T=T+formatic(13)+formatic(10); n=n+2;}
else T=T+formatic(i);
}
er:;
messagebox (T);
|
|
|
Kibor |
Отправлено: 07 Января, 2014 - 12:24:28
|


Эксперт

Просматривает форум
Сообщений всего: 8248
Дата рег-ции: Март 2013
Откуда: Одесса
Репутация: 357

|
Albaz пишет: Еще бы не плохо, еслиб прочтинное с файла помещеть в буфер обмена и потом вставлять в нужные поля программ.
writeclipboard - запись в буфер обмена
Вставлять в поля с буфера обмена можно хоть ctrl+v, хоть по указателю на поле win с помощью разных функций Кибор.
Код простой
CODE://Чтение по целой строке
if (fopen ("C:\22.txt", "r")!=0)//открываем файл для чтения "r"
{//если открылся
string preiemnik;
tt:if (freadline(preiemnik)!=0)//Читаем по целой строке пока не конец файла
{
writeclipboard(preiemnik);
messagebox ("В буфере обмена текст: "+preiemnik);
//Тут вставляем текст куда надо ctrl+v
goto tt;
}
fclose();//закрываем файл
} |
|
|
Albaz |
Отправлено: 10 Января, 2014 - 19:01:40
|


Наблюдатель

Покинул форум
Сообщений всего: 46
Дата рег-ции: Нояб. 2013
Репутация: 0

|
Kibor пишет:
freadline - читает строку с открытого файла. Принимает в виде параметра string.
Синтаксис:
string a;
freadline (a);
Возвращает 1 если не конец файла, 0 если конец файла, -1 если в параметр не string.
[/code]
А как бы с переводом каретки назад?(Отредактировано автором: 10 Января, 2014 - 19:03:08) |
|
|
Kachan |
Отправлено: 01 Марта, 2016 - 23:13:43
|


Прохожий

Покинул форум
Сообщений всего: 22
Дата рег-ции: Дек. 2015
Откуда: Киев, Украина
Репутация: 0

|
Вот у меня есть такой код: CODE:function writelog()
{
resettextout(1);
textout(1, 10, 80, text[0], 1);
textout(2, 10, 100, text[1], 1);
textout(3, 10, 120, text[2], 1);
textout(4, 10, 140, text[3], 1);
textout(5, 10, 160, text[4], 1);
textout(6, 10, 180, text[5], 1);
textout(7, 10, 200, text[6], 1);
textout(8, 10, 220, text[7], 1);
textout(9, 10, 240, text[8], 1);
textout(10, 10, 260, text[9], 1);
text[9] = text[8];
text[8] = text[7];
text[7] = text[6];
text[6] = text[5];
text[5] = text[4];
text[4] = text[3];
text[3] = text[2];
text[2] = text[1];
text[1] = text[0];
int Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds;
getlocaltime(Year, Month, DayOfWeek, Day, Hour, Minute, Second, Milliseconds);
if(fopen ("D:\Avtoregbot lite version\log.txt", "w")!=0)
{
fwrite(ENDL);
fwrite(Hour);
fwrite(":");
fwrite(Minute);
fwrite(":");
fwrite(Second);
fwrite(" - ");
fwrite(text[0]);
fwrite(ENDL);
fclose();
}
}
К сожалению он записывает только одну строку в файл которая последняя была записана в переменную text[0];
Выглядит вот так:
Как сделать так, что бы строчка сохранялась и записывалась новая.
Надо что бы выглядело так:
|
|
|
|