#include "stdafx.h"
#include "windows.h" //для фукций работы с файлами и проекциями файлов
#include "shlwapi.h" //для StrToInt()
#include "malloc.h" //для динамического выделения памяти
#define FILENAME "file.txt" //имя файла
int main(int argc, char* argv[])
{
HANDLE hFile = CreateFile(FILENAME, GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL); //открываем файл
if (hFile == INVALID_HANDLE_VALUE) //если файла нет
return 1; //то выходим с кодом 1
HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); //проецируем файл в память
char *fmatr = (char *) MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 0); //получаем указатель на начало проекции
int **matrica;
unsigned i, n = 1;
for (i = 0; i < strlen(fmatr); i++) { //определяем
if (fmatr[i] == ' ') //число
n++; //пробелов
if (fmatr[i] == '\r') //в первой строке
break;
}
matrica = (int **) calloc(n, sizeof(int*)); //выделяем память под массив указателей
for (i = 0; i < n; i++) //содержащий
matrica[i] = (int *) calloc(n, sizeof(int)); //массивы чисел
int j = 0, a = 0, n1 = 0, n2 = 0;
char val[3] = "";
for (i = 0; i < strlen(fmatr); i++) { //читаем проекцию файла (работаем как со строкой)
if (fmatr[i] == '\r') { //при завершении строки
matrica[n1++][n2] = StrToInt(val); //пишем значение и переходим на новую
n2 = 0;
i++;
j++;
a = 0;
strcpy(val, "");
continue;
}
if (fmatr[i] != ' ') //если не пробел
val[a++] = fmatr[i];//то добавляем символ к строке, седержащей элемент матрицы
else {//а если пробел
matrica[n1][n2++] = StrToInt(val); //то пишем значение и переходим к новой ячейке
a = 0;
strcpy(val, "");
}
}
matrica[n1][n2] = StrToInt(val); //пишем последний элемент
//здесь будет код работы с матрицей
for (i = 0; i < n; i++)
free(matrica[i]); //удаляем сначало массивы чисел (внутренние)
free(matrica); //а затем и массив указателей
UnmapViewOfFile(fmatr); //закрываем
CloseHandle(hFileMap); //все
CloseHandle(hFile); //объекты ядра
return 0;
}