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

E2034 Cannot convert 'TStringList' to 'TStringList *'

13.08.2018, 09:55. Показов 3950. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Пытаюсь сделать так чтобы можно было выбрать неограниченное количество файлов, но почему то ругается...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
TStringList **Ffile;
// Кажется дело в неверном объявлении. По "->" не могу использовать никаких методов
std::auto_ptr<TStringList>a(new TStringList);
if (OpenDialog1->Execute())
    {
        if (OpenDialog1->Files->Count > 1)
        {
            Memo2->Lines->Add(log0);
            Memo2->Lines->Add("Вы выбрали сл. файлы:");
            for (int i = 0; i < OpenDialog1->Files->Count; i++)
            {
                Ffn = OpenDialog1->Files->Strings[i];
                a->LoadFromFile(Ffn);
                Memo2->Lines->Add(OpenDialog1->Files->Strings[i]);
            }
        }
    }
Т.е. мне нужно выгрузить каждый файл в TStringList a, затем воспользоваться Delimiter и сохранить полученные данные в i-ый столбец двумерного массива TStringList **Ffile. Но я почему-то не могу ничего поделать с TStringList **.

Добавлено через 47 минут
Попробовал сделать так:
C++
1
std::vector<TStringList*>Ffile;
Но не могу понять как это работает. Т.е. надо создавать через Ffile.push_back новый StringList а потом загружать в него файл через LoadFromFile, но еще на этапе создания получаю ошибку:
[bcc32 Error] Unit1.cpp(39): E2034 Cannot convert 'TStringList' to 'TStringList *'

Добавлено через 9 минут
Продолжу свой монолог
Узнал, что можно динамически создавать и StringGrid'ы. Можно примерчик (объявление и инициализация)? StringGrid'ами удобнее было бы
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.08.2018, 09:55
Ответы с готовыми решениями:

Convert TStringList to UnicodeList
Как мне сконвертировать TStringList в UnicodeString ? Вот ощибка: Unit21.cpp(25): E2034 Cannot convert 'TStringList' to...

E2034 Cannot convert
вот эта строка CppWebBrowser-&gt;OnBeforeNavigate2 = CppWebBrowser1BeforeNavigate2; вызывает ошибку Unit1.cpp(112): E2034 Cannot...

E2034 Cannot convert 'wchar_t *' to 'char *'
Здравствуйте ! Опять у меня такая же проблема, помогите пожалуйста, уловить в чём тут &quot;собака порылась&quot;. В C++ Builder6...

12
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
13.08.2018, 10:37  [ТС]
В общем, получилось так:
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
#define FCount 50
    TStringList **Ffile = new TStringList*[FCount];
    for (int j=0; j< FCount; j++)
    Ffile[j] = new TStringList();
 
    OpenDialog1->InitialDir=WideString(PATH) + "CSV";
    if (OpenDialog1->Execute())
    {
        if (OpenDialog1->Files->Count > 1)
        {
            Memo2->Lines->Add(log0);
            Memo2->Lines->Add("Вы выбрали сл. файлы:");
            for (int i = 0; i < OpenDialog1->Files->Count; i++)
            {
                Ffn = OpenDialog1->Files->Strings[i];
                AnsiString b = OpenDialog1->Files->Strings[i];
                b = b.SubString(b.LastDelimiter("\\")+1, b.Length());
                a->LoadFromFile(Ffn);
                Memo2->Lines->Add(b);
                Ffile[i]->LoadFromFile(Ffn);
            }
        }
    }
    for (int k = 0; k < OpenDialog1->Files->Count; k++)
    {
        for (int i = 0; i < Ffile[k]->Count; i++)
        {
            StringGrid3->RowCount++;
            StringGrid3->Cols[i] = Ffile[i];
        }
    }
Теперь вот такая проблема:

Добавляет по принципу пирамиды:
1 строка 1 файла (1С1Ф) 1С2Ф 1С3Ф 1С4Ф 1С5Ф
2С1Ф 2С2Ф 2С3Ф 2С4Ф 2С5Ф
3С2Ф 3С3Ф 3С4Ф 3С5Ф
4С3Ф 4С4Ф 4С5Ф
5С4Ф 5С5Ф
6С5Ф
И вообще без понятия, как это исправить..
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,363
Записей в блоге: 3
13.08.2018, 12:21
Лучший ответ Сообщение было отмечено Letzins как решение

Решение

Letzins, пример файла прикрепите сюда...
А вообще текст из всех выбранных в диалоге файлов можно загнать в 1 стринглист следующим, например, образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  if(!OpenDialog1->Execute()) return;
  TStringList *a = new TStringList;
  TStringList *b = new TStringList;
  for(int i = 0; i < OpenDialog1->Files->Count; i++)
   {
     b->LoadFromFile(OpenDialog1->Files->Strings[i]);
     a->AddStrings(b);
   }
  delete b;
//с а делаем то, что надо... Потом удаляем
 delete a;
}
1
UeArtemis
18 / 18 / 3
Регистрация: 23.09.2011
Сообщений: 205
13.08.2018, 12:31
Цитата Сообщение от Letzins Посмотреть сообщение
Но я почему-то не могу ничего поделать с TStringList **.
Какой смысл этой двумерности?
Может просто создать TList, куда закидать TStringList'ы? Ну, или в TStringList добавлять другие TStringList в Objects.
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
13.08.2018, 14:40
Цитата Сообщение от Letzins Посмотреть сообщение
StringGrid'ами удобнее было бы
Можно создать табличку__
C++
1
   TStringGrid *grid = new TStringGrid(this);
Будет создана невидимая (по моему это предпочтительнее; ну разве что на период отладки назначить ей родителя, чтобы контролировать происходящее) таблица с дефолтовыми характеристиками - 5х5. Только не забыть подключить <Grids.hpp>. И дальше работать с её ячейками как обычно.
1
13.08.2018, 15:09

Не по теме:

Цитата Сообщение от nick42 Посмотреть сообщение
Будет создана невидимая (по моему это предпочтительнее;
Совсем нет. И явно излишне.

0
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
13.08.2018, 15:09  [ТС]
В общем, вот как сделал
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
#define FCount 50
TStringList **_File = new TStringList*[FCount];
std::auto_ptr<TStringList>a(new TStringList);
void __fastcall TForm1::Open1Click(TObject *Sender)
{
    if (OpenDialog1->Execute())
    {
        if (OpenDialog1->Files->Count > 1)
        {
            Memo1->Lines->Add(log0);
            Memo1->Lines->Add("Выбраны файлы:");
            for (int i = 0; i < OpenDialog1->Files->Count; i++)
            {
                StringGrid2->ColCount++;
                for (int j=0; j< FCount; j++) _File[j] = new TStringList();
                StringGrid3->Cells[0][i] = OpenDialog1->Files->Strings[i];
                AnsiString b = StringGrid3->Cells[0][i];
                b = b.SubString(b.LastDelimiter("\\")+1, b.Length());
                a->LoadFromFile(StringGrid3->Cells[0][i]);
                Memo1->Lines->Add(b);
                _File[i]->LoadFromFile(StringGrid3->Cells[0][i]);
                StringGrid2->RowCount = _File[i]->Count;
                StringGrid2->Cols[i] = _File[i];
            }   }   }
    StringGrid2->ColCount--;
    StringGrid3->RowCount = OpenDialog1->Files->Count;
    ImportTable();
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::ImportTable()
{
    std::auto_ptr<TStringList>_file(new TStringList);
    if (OpenDialog1->Files->Strings[0] != "")
    {
 
        CurFile = OpenDialog1->Files->Strings[0];
        _file->LoadFromFile(CurFile);
        for (int i = 0; i < _file->Count; i++)
        {
            StringGrid1->RowCount++;
            StringGrid1->Rows[i]->Delimiter = ',';
            StringGrid1->Rows[i]->DelimitedText = _file->Strings[i];
        }
        StringGrid1->RowCount--;
    }
    if (OpenDialog1->Files->Count > 1)
    {
        for (int u = 1; u <= OpenDialog1->Files->Count; u++)
        {
            CurFile = OpenDialog1->Files->Strings[u];
            _file->LoadFromFile(CurFile);
            int j = StringGrid1->RowCount;
            int p = _file->Count;
            for (int i = 2; i < p; i++)
            {
                StringGrid1->RowCount++;
                StringGrid1->Rows[i+j-2]->Delimiter = ',';
                StringGrid1->Rows[i+j-2]->DelimitedText = _file->Strings[i];
            }   }   }
}
nick42, TheDarkMax2, D1973, Спасибо за наводки!
Теперь вот пытаюсь отсортировать один общий стринггрид (со всем данными из файлов по порядку StringGrid1).
0
Эксперт С++
 Аватар для Avazart
8484 / 6151 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
13.08.2018, 15:27
Есть много более простых вариантов начиная от массива/TObjectList + TStringList до использования std::vector<>
1
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
14.08.2018, 08:56  [ТС]
nick42, не подскажете, что я не так делаю?
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
TStringGrid **_Grid = new TStringGrid*[FCount];
for (int j=0; j< FCount; j++) _Grid[j] = new TStringGrid(); // Вот здесь начинает жаловаться, что я даун
    for (int j = 0; j < _Grid[0]->RowCount; j++)
    {
        StringGrid5->Rows[j] = _Grid[0]->Rows[j];
    }
    for (int i = 0; i < OpenDialog1->Files->Count; i++)
    {
        _Grid[i]->FixedCols = 0;
        _Grid[i]->FixedRows = 0;
        _Grid[i]->ColCount = 5;
        _Grid[i]->RowCount = 1;
    }
    for (int i = 0; i < OpenDialog1->Files->Count; i++)
    {
        std::auto_ptr<TStringList>CF(new TStringList);
        CF->LoadFromFile(OpenDialog1->Files->Strings[i]);
        for (int j = 0; j < CF->Count; j++)
        {
            _Grid[i]->Rows[j]->Delimiter = ',';
            _Grid[i]->Rows[j]->DelimitedText = CF->Strings[j];
        }
        _Grid[i]->RowCount = CF->Count;
    }
Выдает ошибку:
Code
1
[bcc32 Error] Unit1.cpp(563): E2285 Could not find a match for 'TStringGrid::TStringGrid()'
TStringList точно так же объявлял и создавал, и он работает
C++
1
2
TStringGrid **_Grid = new TStringGrid*[FCount];
for (int j=0; j< FCount; j++) _Grid[j] = new TStringGrid();
а вот с гридами проблема

Добавлено через 12 минут
Avazart, просто у меня дедлайн, а Grid'ами привычнее, поэтому думаю будет быстрее с помощью них решить задачу.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
14.08.2018, 09:54
Лучший ответ Сообщение было отмечено Letzins как решение

Решение

Грид - визуальный компонент, поэтому ему надо указывать владельца и родителя:
C++
1
2
3
4
5
for (int j=0; j< FCount; j++)
{
    _Grid[j] = new TStringGrid(this);
    _Grid[j]->Parent = this;
}
1
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
14.08.2018, 10:53
Лучший ответ Сообщение было отмечено Letzins как решение

Решение

C++
1
2
3
4
5
    TStringGrid *grid[8];
    for(int i=0;i<8;i++) grid[i] = new TStringGrid(this);
    grid[2]->Rows[1]->CommaText = "One Two Three Four Five";
    Caption = grid[2]->Cells[3][1]+" "+grid[2]->Cells[1][1];
    //  rezult:  "Four Two"
1
0 / 0 / 0
Регистрация: 23.05.2017
Сообщений: 65
14.08.2018, 11:11  [ТС]
volvo, nick42, Спасибо! Успел сам найти информацию (родителя кстати не указывал, но без проблем работает) Классная все-таки штука этот Grid со всеми своими возможностями.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
14.08.2018, 11:15
Цитата Сообщение от Letzins Посмотреть сообщение
Классная все-таки штука этот Grid со всеми своими возможностями.
Классная, но и загадочная... .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
14.08.2018, 11:15
Помогаю со студенческими работами здесь

E2034 Cannot convert 'TColumn *' to 'TTntColumn *'
Помогите пожалуйста void __fastcall TMainForm::DBGrid2DrawColumnCell(TObject *Sender, const TRect &amp;Rect, int DataCol,...

E2034 Cannot convert 'TStrings' to 'UnicodeString'
Добрый день :) Помогите понять что за ошибка TStrings *s; s-&gt;LoadFromFile(&quot;list.txt&quot;); for(int i=0; i &lt; s-&gt;Count; i++) { ...

Ошибка E2034 Cannot convert 'wchar_t *' to 'char *'
Ошибка при компиляции (bcc32error) смотреть скриншот Установлена последняя версия (С++Builder XE6)

Ошибка: E2034 Cannot convert 'TStrings' to 'AnsiString'
когда программа запускается вылезает ошибка: E2034 Cannot convert 'TStrings' to 'AnsiString' for (int...

Ошибка E2034: Cannot convert 'TStrings * const' to 'UnicodeString'
я пишу программу отправки на Email когда я пишу строчку IdMessage1-&gt;Body-&gt;Text=Memo1-&gt;Lines;// текст компилятор выбивает вот такую ошибку ...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru