1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
| void __fastcall TForm1::Button2Click(TObject *Sender) //обработка щелчка по Button2
{
if (SaveDialog1->Execute()) //диалоговое окно сохранения файла
{
int f;
if (FileExists(SaveDialog1->FileName)) //проверка на сущ-е файла
{
DeleteFile(SaveDialog1->FileName); //если да, то удаление сущ-его файла с таким именем
f = FileCreate(SaveDialog1->FileName, fmOpenWrite); //сохранение файла
}
else
f = FileCreate(SaveDialog1->FileName); //сохранение файла
if (f != -1) //проверка на удачность сохранения
{
for (int i = 0; i < StringGrid1->RowCount; i++) //перебор всех рядов
{
AnsiString st = StringGrid1->Rows[i]->DelimitedText + "\r\n"; //присваивание строке текста из рядов StringGrid1 и конкатенация с символами возврата каретки и перехода на нов строку
FileWrite(f,st.c_str(),st.Length()); //запись строки в файл
}
FileClose(f); //закрытие файла
}
else ShowMessage("Ошибка доступа"); //вывод ошибки
}
}
//---------------------------------------------------------------------------
int GetLine(int f, AnsiString *st) //чтение строк из файла
{
unsigned char buf [256]; //буфер под строку
unsigned char *p = buf; //ук-ль на буфер
int n;
int len=0; //длина файла
n = FileRead(f, p, 1); //чтение из файла
while(n != 0)
{
if (*p == '\r')
{
n=FileRead(f,p,1); //если не символ возврата каретки, то читаем в буфер
break;
}
len++; //инкремент длины
p++;
n=FileRead(f, p, 1); //чтение из файла
}
*p = '\0'; //конечный ноль
if (len != 0 )
st->printf("%s", buf);
return len; //возврат длины файла
}
void __fastcall TForm1::Button3Click(TObject *Sender) //обработка щелчка по Button3
{
for (int i=0; i<StringGrid1->RowCount; i++) //очистка StringGrid1
StringGrid1->Rows[i]->Clear();
StringGrid1->RowCount=0;
StringGrid1->ColCount=0;
if (OpenDialog1->Execute()) //диалоговое окно открытия файла
{
int f;
AnsiString st;
bool fl = true;
f = FileOpen(OpenDialog1->FileName, fmOpenRead); //открытие файла
if (f == -1)
exit;
while (GetLine(f,&st) != 0) //чтение строки
{
if (fl)
{
for (int i=1; i<st.Length(); i++) //проход по всей строке
if (st[i]==',') StringGrid1->ColCount++; //если запятая то инкремент кол-ва колонок
StringGrid1->Rows[StringGrid1->Row]->DelimitedText = st; //запись строки в StringGrid1
fl = false;
n = StringGrid1->ColCount; //кол-во колонок
k = new int*[n]; //динам выделение памяти под указатели типа int в кол-ве n
for (int i = 0; i < n; i++)
k[i] = new int[n]; //динам выделение памяти под массив типа int в кол-ве n
}
else
{
StringGrid1->RowCount++; //инкремент кол-ва рядов
StringGrid1->Row = StringGrid1->RowCount - 1;
StringGrid1->Rows[StringGrid1->Row]->DelimitedText = st; //присваивание строки в StringGrid1
}
}
for (int i = 0; i < StringGrid1->ColCount; i++)
for (int j = 0; j < StringGrid1->RowCount; j++)
k[i][j] = StringGrid1->Cells[i][j].ToInt(); //присваивание массиву k значений StringGrid1
FileClose(f); //закрытие файла
}
} |