Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5

Обработка форматной строки

26.05.2015, 09:05. Показов 1908. Ответов 33
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую ребята!
Имеется файл, в файле строки такого типа:
101105001110107340173401072103000 4.2014 3.0
101105001110107340173401073104000 4.2014 3.2
101105001110107340173401073106000 3.2014 2.1 1.5
101105001110107340173401073106000 4.2014 2.7
101105001110107340173401073203000 2.2014 2.7 2.0 1.3
101105001110107340173401074104000 4.2014 6.1
101105001110107340173401074105000 4.2014 3.0
101105001110107340173401074108000 2.2014 1.7 1.2 0.7
101105001110107340173401075103000 2.2014 2.3 1.6 1.0
Т.е. по сути, данные разделены каким-то "пробелом" вернее табуляцией (походу)
У меня вопрос возник, как обработать данные такой строки, т.е., например, мне нужно обработать данные из предпоследнего столбика. Что-то не могу сообразить, как мне достучаться до этих данных, именно на этой позиции(позиции предпоследнего столбика).
Предполагаю что нужно как-то обработать эти служебные символы - "табуляции".
Ребят, пните в нужном направлении, не могу догнать, что к чему
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2015, 09:05
Ответы с готовыми решениями:

Обработка txt от одной строки до определенной
Добро всем! :senor: Мне одна организация выгружает реестр и так случилось что у них очень слабый специалист по 1с всвязи с чем они мне с...

Параметры форматной строки
Доброго времени суток. У меня возникла проблема при работе с форматной строкой, а именно с параметром %n. Пишу в Codeblocks. Результат не...

[NASM] Ошибка при выводе форматной строки
Если не сложно посмотрите код, вроде все сделал как надо, но программа не выдает мне нужного результата global _main extern _scanf ...

33
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
26.05.2015, 09:13
Что имеется ввиду под предпоследним столбиком?
101105001110107340173401072103000 4.2014 3.0
101105001110107340173401073104000 4.2014 3.2
101105001110107340173401073106000 3.2014 2.1 1.5
101105001110107340173401073106000 4.2014 2.7
101105001110107340173401073203000 2.2014 2.7 2.0 1.3
101105001110107340173401074104000 4.2014 6.1
101105001110107340173401074105000 4.2014 3.0
101105001110107340173401074108000 2.2014 1.7 1.2 0.7
101105001110107340173401075103000 2.2014 2.3 1.6 1.0
или
101105001110107340173401072103000 4.2014 3.0
101105001110107340173401073104000 4.2014 3.2
101105001110107340173401073106000 3.2014 2.1 1.5
101105001110107340173401073106000 4.2014 2.7
101105001110107340173401073203000 2.2014 2.7 2.0 1.3
101105001110107340173401074104000 4.2014 6.1
101105001110107340173401074105000 4.2014 3.0
101105001110107340173401074108000 2.2014 1.7 1.2 0.7
101105001110107340173401075103000 2.2014 2.3 1.6 1.0
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 09:32  [ТС]
Это форумное форматирование "испоганило" пример
Сейчас текстовый выложу
parse-txt.txt
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
26.05.2015, 09:33
Почтальен, Выделите жирным значения, к которым Вы хотите обратиться.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 09:35  [ТС]
Цитата Сообщение от demon_7 Посмотреть сообщение
101105001110107340173401072103000 4.2014 3.0
101105001110107340173401073104000 4.2014 3.2
101105001110107340173401073106000 3.2014 2.1 1.5
101105001110107340173401073106000 4.2014 2.7
101105001110107340173401073203000 2.2014 2.7 2.0 1.3
101105001110107340173401074104000 4.2014 6.1
101105001110107340173401074105000 4.2014 3.0
101105001110107340173401074108000 2.2014 1.7 1.2 0.7
101105001110107340173401075103000 2.2014 2.3 1.6 1.0
Вот, ты правильно отметил в своем сообщении.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.05.2015, 09:35
Цитата Сообщение от Почтальен Посмотреть сообщение
как мне достучаться
Я бы сделал с помощью виртуальной таблицы; и потом обращался бы к ячейкам соотв. столбца. Пример...
C++
1
2
3
4
5
6
7
8
9
10
11
    TStringList *SL = new TStringList ;
    SL->LoadFromFile("..\\tempo.txt");
    TStringGrid *grid2 = new TStringGrid(this);
    grid2->ColCount=5; grid2->RowCount=SL->Count;
    for(int i=0;i<SL->Count;i++)
     grid2->Rows[i]->CommaText=SL->Strings[i];
 
    SL->Clear();
    SL->Assign(grid2->Cols[3]);
    SL->SaveToFile(".\\333.txt");
    delete SL; delete grid2;
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 09:38  [ТС]
Сейчас перекинул в эксель, там, вроде бы, раскидало по колонкам, т.е. стало более наглядно. Но что-то в экселе не хочу скрипт писать , хочу в билдере

Добавлено через 2 минуты
Цитата Сообщение от nick42 Посмотреть сообщение
Я бы сделал с помощью виртуальной таблицы; и потом обращался бы к ячейкам соотв. столбца. Пример...
За пример спасибо. Вот это уже лучше. Просто пока не понял, как в стринг-грид грузить, чтоб с разделителями подставлялся. Т.е. структура файла - это по сути таблица, которая имеет 7 колонок, вот нужно обработать 6-ую колонку
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
26.05.2015, 09:45
Плохо, что формат строк "размытый", с пустотами. По моему методу может не получиться. Для CommaText разделителями полей будут пробел, запятая, табуляция..., но если две-три запятые вместе оставят соотв. ячейки пустыми, то подряд несколько пробелов или таб - не уверен.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 09:52  [ТС]
Нее, вот разделитель как раз - табуляция, в ноутпаде это хорошо видно
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 10:26  [ТС]
Получилось вот что:

Но хотелось бы загрузить в таблицу с учетом разделителей(табов), т.е. если таб, то пропускаем колонку.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 10:46  [ТС]
Тут видимо нужно использовать свойство Delimiter, только проблема в том, как задать табуляцию
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
26.05.2015, 10:51
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

Цитата Сообщение от Почтальен Посмотреть сообщение
Тут видимо нужно использовать свойство Delimiter
Верно мыслите
C++
1
2
3
4
5
TStringList *SL=new TStringList;
SL->LoadFromFile("C:\\1.txt");
SL->Text = StringReplace(SL->Text,"\t", ";", TReplaceFlags() << rfReplaceAll);
SL->Delimiter=';';
SL->DelimitedText=SL->Text;
Потом все это переносите в StringGrid.
Выглядит вроде корректно.
Миниатюры
Обработка форматной строки  
1
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 11:26  [ТС]
Что-то безбожно виснет прога:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 TStringList *SL = new TStringList;
        SL->LoadFromFile("553.txt");
 
        StringGrid1->ColCount = 7;
        StringGrid1->RowCount = SL->Count;
 
        SL->Text = StringReplace(SL->Text,"\t", ";", TReplaceFlags() << rfReplaceAll);
    SL->Delimiter=';';
    SL->DelimitedText=SL->Text;
 
        for(int i=0;i<SL->Count;i++)
        StringGrid1->Rows[i]->CommaText = SL->Strings[i];
 
        SL->Clear();
        delete SL;
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
26.05.2015, 11:41
Почтальен, алгоритм не верный.
Выведите в Memo Ваш SL после этой строки
C++
1
SL->DelimitedText=SL->Text;
и поймете что
C++
1
StringGrid1->Rows[i]->CommaText = SL->Strings[i];
не совсем верно.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 11:46  [ТС]
Да, я это уже понял, загрузил короткий файл, все в одну колонку зафигачил
Как поправить ?

Добавлено через 1 минуту
Лишнее, наверно, CommaText
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
26.05.2015, 11:48
Ваша строка в SL
Например: значение1;значение2;;значение4
После
C++
1
SL->DelimitedText=SL->Text;
Выглядит как:
значение1
значение2

значение4
Другими словами, каждое слово после разделителя с новой строки.
Следовательно Вам необходимо заполнять ячейки СтрингГрида а не строки.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 11:51  [ТС]
плюс еще после каждого разделителя добавляется перенос строки, видимо из-за этого

Добавлено через 2 минуты
Цитата Сообщение от demon_7 Посмотреть сообщение
Другими словами, каждое слово после разделителя с новой строки.
Следовательно Вам необходимо заполнять ячейки СтрингГрида а не строки.
а как я узнаю, что строка в файле закончилась, чтобы перейти к заполнению новой ?
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
26.05.2015, 11:53
У Вас строгая структура, строка из 7 значений.
Арифметически вычислить можно.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
26.05.2015, 12:27  [ТС]
Не сочтите за наглость, но у вас на скрине как раз то что нужно

Добавлено через 27 минут
Понимаю что выкладываю бред
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
TStringList *SL = new TStringList;
        SL->LoadFromFile("553.txt");
 
        StringGrid1->ColCount = 7;
        StringGrid1->RowCount = SL->Count;
 
        SL->Text = StringReplace(SL->Text,"\t", ";", TReplaceFlags() << rfReplaceAll);
    SL->Delimiter=';';
    SL->DelimitedText=SL->Text;
 
        for(int i=0;i<SL->Count;i++)
        {
            for(int y=0; y<=6; y++)//т.к. всего семь колонок
                {
                    StringGrid1->Cells[y][i] = SL->Strings[i];
                }
        }
 
        SL->Clear();
        delete SL;
Получается что в TStringList у нас хранятся данные, всего в один столбик.
Блин, вообще запутался

Добавлено через 2 минуты
Кажется догнал
0
 Аватар для demon_7
260 / 192 / 60
Регистрация: 12.05.2013
Сообщений: 857
26.05.2015, 12:39
Ну ладно, на коленке написал.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
TStringList *SL = new TStringList;
SL->LoadFromFile("C:\\1.txt");
StringGrid1->ColCount = 7;
StringGrid1->RowCount = SL->Count;
SL->Text = StringReplace(SL->Text,"\t", ";", TReplaceFlags() << rfReplaceAll);
SL->Delimiter=';';
SL->DelimitedText=SL->Text;
int s=0;//Наш счетчик для SL
 
for(int i=0; i<SL->Count/7; i++) // SL->Count/7 столько у нас будет строк
        {
        for  (int j=0; j<7; j++)// столбцов понятно
                {
StringGrid1->Cells[j][i]=SL->Strings[s];// Заполняем. наша s простой счетсчик который должен увеличиваться на 1 при каждом присвоении значения
s++;
                }
        }
 
 
SL->Clear();
delete SL;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2015, 12:39
Помогаю со студенческими работами здесь

Из форматной строки и символа требуется получать все ASCII символы
Есть &quot;{0}&quot;,(char)AscCode требуется получить, пропустив через String.Format(), массив байтов (всех ASCII символов 0-255). Премного...

Вывести с использованием форматной строки значения переменных и результат вычисления выражения
всем привет.мне надо сделать кучу задач,но я что то не могу разобраться.помогите пожалуйста с первой задачей,а дальше я уже сам разберусь...

Принудительная постановка знака в форматной строке
Вопрос такой: в сях можно было в форматной строке указать что-нибудь вида printf(&quot;%+i&quot;, myInt); , что приводило к...

Обработка строки. Как вырезать из имеющейся строки определенные символы
Имеется строка {текст} Как получить текст без {}?

Обработка строки. Как скопировать из строки определенный кусочек
Господа программисты. Я с очередной проблемой.... Имеем строку большой длины, а именно 42 символа. Как скопировать часть этой строки,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru