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

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

26.05.2015, 09:05. Показов 1837. Ответов 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
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
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
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru