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

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

26.05.2015, 09:05. Показов 1849. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru