Форум программистов, компьютерный форум, киберфорум
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. Показов 3984. Ответов 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
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 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
8488 / 6155 / 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
33403 / 21513 / 8236
Регистрация: 22.10.2011
Сообщений: 36,914
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru