-5 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 13
1

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

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

Author24 — интернет-сервис помощи студентам
Нужно добавить нового параллепипеда в таблицу 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2016, 21:40
Ответы с готовыми решениями:

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

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

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

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

10
Модератор
9248 / 6028 / 2377
Регистрация: 21.01.2014
Сообщений: 25,778
Записей в блоге: 3
05.06.2016, 11:53 2
Цитата Сообщение от 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  [ТС] 3
Спасибо , но могли бы вы написать без 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
Модератор
9248 / 6028 / 2377
Регистрация: 21.01.2014
Сообщений: 25,778
Записей в блоге: 3
06.06.2016, 16:18 4
Что такое первая 4?
0
-5 / 0 / 0
Регистрация: 20.11.2015
Сообщений: 13
07.06.2016, 00:06  [ТС] 5
Количество строк в файле
0
Модератор
9248 / 6028 / 2377
Регистрация: 21.01.2014
Сообщений: 25,778
Записей в блоге: 3
07.06.2016, 06:10 6
Вот тут понятно
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  [ТС] 7
Во втором случа да должно быть 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
Практикантроп
4826 / 2718 / 526
Регистрация: 23.09.2011
Сообщений: 5,777
07.06.2016, 14:29 8
А такая запись...?
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
Модератор
9248 / 6028 / 2377
Регистрация: 21.01.2014
Сообщений: 25,778
Записей в блоге: 3
07.06.2016, 17:15 9
Лучший ответ Сообщение было отмечено 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  [ТС] 10
Можете скинуть проэкт Как у вас так коротко получилось , не зря говорят краткость сестра таланта_)
0
Модератор
9248 / 6028 / 2377
Регистрация: 21.01.2014
Сообщений: 25,778
Записей в блоге: 3
10.06.2016, 07:51 11
Цитата Сообщение от Dimitrioglo Посмотреть сообщение
Можете скинуть проэкт
Да, собственно, он весь тут... Ну скину, как до билдера доберусь, не проблема...
0
10.06.2016, 07:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.06.2016, 07:51
Помогаю со студенческими работами здесь

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

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

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

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

Добавить строку в текстовый файл
Имеется текстовый файл. Добавить в него строку из двенадцати черточек (------------), разместив ее:...

Текстовый файл. Добавить строку
Имеется текстовый файл. Добавить в него строку из двенадцати черточек (------------), разместить...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru