11 / 11 / 1
Регистрация: 14.04.2010
Сообщений: 73
1

TStringList -> Duplicates

25.07.2012, 13:17. Показов 3976. Ответов 7
Метки нет (Все метки)

Не как не могу разобраться как он работает и получить от него нужного результат.
Имеется файл CSV файл который подгружается в TStringList* sl1;
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
if(OpenDialog1->Execute())                  //Импортирую CSV
    Edit1->Text = OpenDialog1->FileName;
    if (RadioButton1->Checked == true ) {
 
    TStringList* sl1;
        int i, j;
    TStringList* sl= new TStringList();
    sl->LoadFromFile(OpenDialog1->FileName);
 
    for (i=0;i<sl->Count;i++)
                             {
  sl1=new TStringList();
  sl1->Delimiter=';';
  sl->Strings[i] = StringReplace(sl->Strings[i],  ',',  '.', TReplaceFlags()<< rfReplaceAll);
  DecimalSeparator = '.';
  sl1->DelimitedText=sl->Strings[i];
  StringGrid1->Rows[i]->Assign(sl1);
  sl1->Free();
  sl1=NULL;
  }
    StringGrid1->RowCount = i+1;
Сам файл имеет вот такую структуру
INDEX;SUBJECT;SIGNES;X;EMPIRIC-P(X);VEIBULL-P(X);
КП011;БУКСА_ЛЕВАЯ;dAe;-33,90112;0,00935;0,00417;
КП011;БУКСА_ЛЕВАЯ;dAe;-33,02435;0,01869;0,00907;
КП012;БУКСА_ЛЕВАЯ;dAe;-32,85590;0,02804;0,01021;
КП012;БУКСА_ЛЕВАЯ;dAe;-31,66257;0,03738;0,01997;
Задача такая для нужно для CheckListBox1(INDEX),2(SUBJECT),3(SIGNES)
выбрать не повторяющийся значения такие как (КП011,КП012), (БУКСА_ЛЕВАЯ,БУКСА_правая)....и т.д
Вобщем в CheckListBox нужно будет выбирать нужные элементы из трёх столбцов.
Так же необходимо отсортировать по возрастанию данные по столбцу X.
Пробовал сам написать обработку, но понял, что она работает только, если данные отсортированные.
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
AnsiString char1;                           //Для Index
  AnsiString char2;                         //SUBJECT
  AnsiString char3;                         //SIGNES
  char1 = StringGrid1->Cells[0][1];
  char2 = StringGrid1->Cells[1][1];
  char3 = StringGrid1->Cells[2][1];
  for (j = 1; j <= i; j++) {                //Для Index
    if (StringGrid1->Cells[0][j] != char1) {
        CheckListBox1->Items->Add(char1);
        char1= StringGrid1->Cells[0][j];
        }
  }
  for (j = 1; j <= i; j++) {                //SUBJECT
    if (StringGrid1->Cells[1][j] != char2) {
        CheckListBox2->Items->Add(char2);
        char2= StringGrid1->Cells[1][j];
        }
  }
  for (j = 1; j <= i; j++) {                //SIGNES
    if (StringGrid1->Cells[2][j] != char3) {
        CheckListBox3->Items->Add(char3);
        char3= StringGrid1->Cells[3][j];
        }
  }
Вроде как можно всё это сделать с помощью функции Duplicates, и Sortd но как сними работать?

Картинка
Миниатюры
TStringList -> Duplicates  
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2012, 13:17
Ответы с готовыми решениями:

TStringList->Duplicates
for(int i=0; i&lt;rawData-&gt;Count; i++){ rawData2-&gt;Duplicates = false; ...

E2034 Cannot convert 'TStringList' to 'TStringList *'
Всем привет! Пытаюсь сделать так чтобы можно было выбрать неограниченное количество файлов, но...

Зашифровать TStringList, сохранить, прочитать, получить исходный TStringList
Здравствуйте. Требуется решение следующей задачи: Зашифровать TStringList (количество строк...

Неясности с TStringList. Как найти наибольший элемент в TStringList?
Добрый день. Проблема следующая: мне надо в TStringList найти самую длинную строчку. Пытаюсь...

7
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
25.07.2012, 14:13 2
Цитата Сообщение от V.V.P.Net Посмотреть сообщение
Вроде как можно всё это сделать с помощью функции Duplicates, и Sortd но как сними работать?
C++
1
2
3
4
5
6
7
8
TStringList *list = new TStringList;
list->Sorted = true;// - включаем сортировку (без нее не работает Duplicates)
list->Duplicates = dupIgnore; // dupIgnore —- запрещает добавление повторных элементов;
                                        // dupAccept — разрешает добавление повторных элементов;
                                       //  dupError — запрещает добавление повторных элементов и генерирует исключительную ситуацию.
..... //вводим данные, работаем и т.д.
....
delete list;
Добавлено через 33 минуты
Цитата Сообщение от V.V.P.Net Посмотреть сообщение
Задача такая для нужно для CheckListBox1(INDEX),2(SUBJECT),3(SIGNES)
выбрать не повторяющийся значения такие как (КП011,КП012), (БУКСА_ЛЕВАЯ,БУКСА_правая)....и т.д
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
TStringList *list = new TStringList;  //основной
TStringList *list2 = new TStringList; //разделеный
TStringList *list3 = new TStringList; //INDEX;
TStringList *list4 = new TStringList; // SUBJECT;
TStringList *list5 = new TStringList; // SIGNES
 
list->LoadFromFile("1.txt");
list3->Sorted = true;
list3->Duplicates = dupIgnore;
list4->Sorted = true;
list4->Duplicates = dupIgnore;
list5->Sorted = true;
list5->Duplicates = dupIgnore;
for (int i = 1; i<list->Count; i++)
{
        ExtractStrings(TSysCharSet() << ';', TSysCharSet(), list->Strings[i].c_str() , list2);
        list3->Add(list2->Strings[0]);
        list4->Add(list2->Strings[1]);
        list5->Add(list2->Strings[2]);
        list2->Clear();
}
CheckListBox1->Items->Assign(list3);
CheckListBox2->Items->Assign(list4);
CheckListBox3->Items->Assign(list5);
delete list;
delete list2;
delete list3;
delete list4;
delete list5;
2
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2012, 14:18 3
Почему банально не использовать fstream и класс перегруженый относительно потоков ввода для хранение строки?
А там стандартные контейнеры и алгоритмы в помощь
0
512 / 454 / 119
Регистрация: 17.02.2012
Сообщений: 1,032
Записей в блоге: 1
25.07.2012, 14:28 4
Цитата Сообщение от Avazart Посмотреть сообщение
Почему банально не использовать fstream и класс перегруженый относительно потоков ввода для хранение строки?
а если не сложно можно пример или нечто - что бы посмотреть о чем речь.
в образовательных целях
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
25.07.2012, 14:57 5
Ну допустим есть строка
Код
КП012;БУКСА_ЛЕВАЯ;dAe;-31,66257;0,03738;0,01997;
Пакуем её в структуру
C++
1
2
3
4
5
6
struct line_t
{
 std::string s1,s2,s3;
 float f1,f2,f3;
 friend std::istream& operator>>(const istream& stream, line_t& obj);
};
Перегружаем ввод
C++
1
2
3
4
5
6
7
8
std::istream& operator>>(const istream& stream,const line_t& line)
{
 std::getline(stream,line.s1,';');
 std::getline(stream,line.s2,';');
 //... итд
 std::getline(stream,line.f3,';'); 
 return stream;
}
Набор строк:
C++
1
2
typedef std::vector<line_t> csv_t;
csv_t csv;
Сортировка:
C++
1
std::sort(csv.begin(),csv.end() );
Уникальность:
C++
1
csv.erase(std::unique(csv.begin(),csv.end() ), csv.end() );
Код приблизительный лень было проверять в среде. ( возможны ошибки и неточности )

Есть конечно тонкости касающейся данной задачи, но мне не хочится вдавать в них, показываю лишь основной принцип
1
4039 / 2329 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
27.07.2012, 07:21 6
При таком подходе надо еще не забыть прописать для структуры операторы < и ==, чтобы работали соответственно sort и unique.
0
Эксперт С++
8379 / 6140 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
27.07.2012, 08:26 7
При таком подходе надо еще не забыть прописать для структуры операторы < и ==, чтобы работали соответственно sort и unique.
Думаю лучше написать функтуры.
0
LK
Заблокирован
27.07.2012, 11:06 8
Avazart, не уводите обсуждение от темы.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.07.2012, 11:06
Помогаю со студенческими работами здесь

4 duplicates
https://github.com/GordPavel/lab3 Вот мой проект. Уже никак не могу понять, с чего бы вдруг...

Продвинутый remove-duplicates
Должно удалять дубликаты на всех уровнях списка. Пробовал сделать, но пока не поддается решению. ...

Lazarus, Error while compiling resources -> Check for duplicates
Lazarus 1.4.4. Архив проекта . При компиляции выдается сообщение &quot;project1.lpr(18,1) Error: Error...

TStringList
есть переменные mem,send,mema:TStringList; дает ошибку на строке 1 mema:=mem+send;...


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

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

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