Запись файлов 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]);
}
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();//закрываем файл
}
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();
}
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);
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);