Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
-5 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 13

Добавить новую строку в StringGrid таблицу и сохранить в текстовый файл

04.06.2016, 21:40. Показов 2887. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно добавить нового параллепипеда в таблицу StringGrid (код любые цифры, размеры а б ц и цвет ,и из чего сделан метал дерево и т д.) Эти данные у меня хранятся в текстовом файле comoara.txt у меня есть чтение данных из файла в таблицу , мне нужно при нажатии кнопки из майн меню чтобы появилось в первой строке место и ввел данные и потом все это дело сохранить (чтобы в текстовом файле если открыть все было по столбиком отделялось пробелом). Вот все что написал мой код. Прошу если кто нибуть поможет пишите подробней хотябы пару комментариев иначе я могу не понять.
В конце моего кода кину код найденный может вы его сможете применить к моей проге.

C++
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "uParall.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
AnsiString FileName;
TForm1 *Form1;
//---------------------------------------------------------------------------
void __fastcall TForm1::Tab1Sizes()
{
 
     StringGrid1->Width = (StringGrid1->ColCount * (StringGrid1->DefaultColWidth+2))-1;
     StringGrid1->Height = (StringGrid1->RowCount * (StringGrid1->DefaultRowHeight+2))-2;
     StringGrid1->ScrollBars = ssNone;
}
 
int GetData (int f, AnsiString *st)   //÷èòàåò ñòðîêó äî ïðîáåëà
 {
         unsigned char buf[256];
         unsigned char *p = buf;
         int n;
         int len = 0;
          do
            n = FileRead(f, p, 1);
          while ((n != 0)&&(*p == ' '));
 
          while ((n != 0)&&(*p != ' ')){
                  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;
}
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Open1Click(TObject *Sender)
{
  int f;
    int ls;
 
    AnsiString st;
    StringGrid1->Visible = true;
   if (Edit1->Text.Length() ==0 )  ShowMessage("Input file name");
 
      else
      {
         FileName=Edit1->Text;
 
         if ( FileExists(FileName) )
           f = FileOpen(FileName,fmOpenRead);
 
          else {
                    ShowMessage("File not exist!");
                    return;
                }
 
 
 
       if ( f != -1 )
       {
 
             ls=GetData(f,&st);
 
             if(ls) Num = StrToInt(st);
             StringGrid1->RowCount = Num+ 1;
          StringGrid1->ColCount = 7;
 
 
        for(int i=1; i<=Num; i++)
        for(int j=1; j<=6; j++)
         {
           ls=GetData(f,&st);
           StringGrid1->Cells[j][i]=st;
         }
 
 
          for(int i=1; i<=Num; i++)
         StringGrid1->Cells[0][i] = i;
 
          StringGrid1->Cells[1][0] ="Cod";
         StringGrid1->Cells[2][0] ="a";
         StringGrid1->Cells[3][0] ="b";
         StringGrid1->Cells[4][0] ="c";
 
         StringGrid1->Cells[5][0] ="color";
          StringGrid1->Cells[6][0] ="material";
 
        FileClose(f);
       }
        else
         {
           ShowMessage("îøèáêà äîñòóïà ê ôàéëó");
           Edit1->Text = "";
           Edit1->SetFocus();
         }
     // ïîäãîí ðàçìåðîâ òàáëèöû ïî çíà÷åíèÿì
 
 
     Tab1Sizes();
    }
 
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Close1Click(TObject *Sender)
{
Form1->Close();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Add1Click(TObject *Sender)
{
 
тут надо написать код для добавления нового элемента.
 
 
Код который нашел это добавление но там две таблицы.
 
void __fastcall TForm1::N18Click(TObject *Sender)
{
    NRows++;
    StringGrid1->RowCount ++;
    StringGrid2->RowCount ++;
 
    for(int i=NRows; i>2; i--)
      for(int j=1; j<=MColumns; j++)
      {
            StringGrid1->Cells[j][i] = StringGrid1->Cells[j][i-1];
            StringGrid2->Cells[j][i] = StringGrid2->Cells[j][i-1];
          }
 
        for(int j=1; j<=MColumns; j++)
          {
            StringGrid1->Cells[j][1] = "";
            StringGrid2->Cells[j][1] = "";
          }
 
        StringGrid1->Cells[0][NRows] = NRows;
        StringGrid2->Cells[0][NRows] = NRows;
 
 
           // ïîäãîí ðàçìåðîâ òàáëèöû ïî çíà÷åíèÿì
 
     Tab1Sizes();
     Tab2Sizes();
 
     Button1->Visible = true;
     Button2->Visible = true;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.06.2016, 21:40
Ответы с готовыми решениями:

Сохранить таблицу StringGrid в текстовый файл
На основе стандартного шаблона SDI-приложения реализуйте приложение сохранение таблицы в текстовый файл; Вот до чего я дошла: void...

Добавить в конец StringGrid новую строку
Помогите пожалуйста, мне нужно составить список информации о предприятиях и каждый раз нужно добавлять в конец стрингрида строку с...

Добавить новую строку в таблицу
Доброго времени суток!!! С Visual Studio никогда не работала, а вот теперь приходиться, не могу разобраться немного... Есть база на...

10
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
05.06.2016, 11:53
Цитата Сообщение от Dimitrioglo Посмотреть сообщение
чтобы появилось в первой строке место и ввел данные и потом все это дело сохранить
А почему в первой строке? Обычно добавляется в конец таблицы...
1. Добавить строку в таблицу для ввода данных
C++
1
2
3
4
void __fastcall TForm1::btn_AddClick(TObject *Sender)
{
  StringGrid1->RowCount++;
}
2. Сохранение таблицы в файл:
C++
1
2
3
4
5
6
7
8
void __fastcall TForm1::btn_SaveClick(TObject *Sender)
{
  TStringList *L = new TStringList;
  for(int i = 0; i < StringGrid1->RowCount; i++)
     L->Add(StringGrid1->Rows[i]->CommaText);
  L->SaveToFile("c:\\tmp\\333.txt");
  delete L;
}
3. Загрузка таблицы из файла
C++
1
2
3
4
5
6
7
8
9
void __fastcall TForm1::btn_LoadClick(TObject *Sender)
{
  TStringList *L = new TStringList;
  L->LoadFromFile("c:\\tmp\\333.txt");
  StringGrid1->RowCount = L->Count;
  for(int i = 0; i < L->Count; i++)
    StringGrid1->Rows[i]->CommaText = L->Strings[i];
  delete L;
}
0
-5 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 13
06.06.2016, 16:08  [ТС]
Спасибо , но могли бы вы написать без CommaText он из текстового файла ставит запятые и т.д.
Мне нужно из этого файла чтобы получилось.
4
cp1 1 4 4 green metal
cp2 5 3 2 red carton
cp3 1 2 2 blue metal
cp4 2 3 4 red carton

Так добавиться:
4
cp1 1 4 4 green metal
cp2 5 3 2 red carton
cp3 1 2 2 blue metal
cp4 2 3 4 red carton
cp5 2 8 7 black silver

С вашим кодом он сохраняет но коряво.
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
06.06.2016, 16:18
Что такое первая 4?
0
-5 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 13
07.06.2016, 00:06  [ТС]
Количество строк в файле
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
07.06.2016, 06:10
Вот тут понятно
4
cp1 1 4 4 green metal
cp2 5 3 2 red carton
cp3 1 2 2 blue metal
cp4 2 3 4 red carton
их действительно 4... А во втором случае? Строк-то реально 5?
0
-5 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 13
07.06.2016, 13:26  [ТС]
Во втором случа да должно быть 5 , извините_)

Добавлено через 35 минут
C++
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
int f; 
AnsiString str_ln="\x0D\x0A"; 
AnsiString str_sp=" "; 
 
if(FileExists(FileName)) DeleteFile(FileName); 
 
f = FileCreate (FileName); 
 
if (f!=-1) 
{ 
FileWrite(f,(IntToStr(NRows)).c_str(),(IntToStr(NRows)).Length()); 
FileWrite(f,str_sp.c_str(),str_sp.Length()); 
FileWrite(f,(IntToStr(MColumns)).c_str(),(IntToStr(MColumns)).Length()); 
FileWrite(f,str_ln.c_str(),str_ln.Length()); 
 
for(int i=1; i<=NRows; i++) 
for(int j=1; j<=MColumns; j++) 
{ 
FileWrite(f,(StringGrid1->Cells[j][i]).c_str(),(StringGrid1->Cells[j][i]).Length()); 
if (j == MColumns ) 
FileWrite(f,str_ln.c_str(),str_ln.Length()); 
else FileWrite(f,str_sp.c_str(),str_sp.Length()); 
} 
FileClose(f); 
 
} 
else 
ShowMessage("Error!");
Вот я нашел какое - то сохранение , но оно сохраняет и файле пишет 0 0 или 0 1.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
07.06.2016, 14:29
А такая запись...?
C++
1
2
3
4
5
6
7
    TStringGrid *sg = StringGrid1;
    std::ofstream ofl(".\\tbl.txt");
    for(int li=0,co=0;li<5;co++) {
      ofl.write((sg->Cells[co][li]).c_str(),sg->Cells[co][li].Length());
      ofl.write((co!=5 ? " " : "\n" ),1);
      if(co==5) { co = -1; li++; }
    }
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
07.06.2016, 17:15
Лучший ответ Сообщение было отмечено Dimitrioglo как решение

Решение

Вот код. Раз тебе категорично не нравятся запятые, будем использовать пробелы...
Код
C++
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
TForm1 *Form1;
 
TStringList *L;
 
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
  L = new TStringList;
  L->Delimiter = ' ';
  StringGrid1->Rows[0]->CommaText = "Code, A, B, C, Color, Material";
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
  delete L;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_LoadClick(TObject *Sender)
{
  if(!FileExists("c:\\tmp\\222.txt"))
   {
     ShowMessage("Не найден файл для загрузки");
     return;
   }
  L->LoadFromFile("c:\\tmp\\222.txt");
  StringGrid1->RowCount = StrToInt(L->Strings[0]) + 1;
  for(int i = 1; i < L->Count; i++)
    StringGrid1->Rows[i]->DelimitedText = L->Strings[i];
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_AddClick(TObject *Sender)
{
  StringGrid1->RowCount++;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::btn_SaveClick(TObject *Sender)
{
  L->Clear();
  L->Add(IntToStr(StringGrid1->RowCount - 1));
  for(int i = 1; i < StringGrid1->RowCount; i++)
   {
     StringGrid1->Rows[i]->Delimiter = ' ';
     L->Add(StringGrid1->Rows[i]->DelimitedText);
   }
  L->SaveToFile("c:\\tmp\\222.txt");
}
Миниатюры
Добавить новую строку в StringGrid таблицу и сохранить в текстовый файл  
1
-5 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 13
08.06.2016, 12:55  [ТС]
Можете скинуть проэкт Как у вас так коротко получилось , не зря говорят краткость сестра таланта_)
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
10.06.2016, 07:51
Цитата Сообщение от Dimitrioglo Посмотреть сообщение
Можете скинуть проэкт
Да, собственно, он весь тут... Ну скину, как до билдера доберусь, не проблема...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.06.2016, 07:51
Помогаю со студенческими работами здесь

Упорядочить строку по возрастанию, записать в новый текстовый файл новую строку цифр
Создать текстовый файл,который имеет в себе строку цифр.Упорядочить строку по возрастанию,записать в новый текстовый файл новую строку цифр.

QTableView - добавить новую редактируемую строку в таблицу
Здравствуйте, дорогие форумчане. Опять я и опять с вопросом:-Добавлено через 1 час 1 минуту Вот отрывок: QPushButton *add = new...

Нужно программным способом добавить в таблицу базы новую строку
Нужно программным способом добавить в таблицу базы новую строку, в которую необходимо записать значения переменных.. Как это сделать?

Сохранить строку (string) в текстовый файл
Как проще всего полученную строку string сохранить в файл?

Как добавить строку в таблицу объекта DataSet и сохранить её в БД Access?
Помогите. Создал БД в Access. Считал необходимые таблицы. Заполнил ими DataSet. Теперь могу изменять значения полей в таблицах и сохранять...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru