Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 02.07.2015
Сообщений: 16
1

Обработка данных между определённых строк

02.07.2015, 18:58. Показов 1165. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Существует файл
Код
123
123 - 1к
123
---
124 - 24к
124 - 25к
124
---
125
125
125
---
126
126
123 и т.д рандом символы
1,24,25к тоже рандом
Как отфильтровать данные где есть между "---" n- к
а где нету
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.07.2015, 18:58
Ответы с готовыми решениями:

Обработка символьных строк (данных типа String).
Дано строку символов, который состоит из отдельных слов, разделенных интервалом. Вывести на печать...

Обработка символьных строк (данных типа String).Работа над ошибками
Не помогли бы вы мне с моими ошибками в таком задании: Дано строку символов, который состоит из...

Обработка строк. Всё, что находится между /*...*/ не должно выводиться
Надо ввести строку. Например, вот такую: "авытол ыва: тмлвам, рлвым /*толлми ьмлдв вам*/ мавмм...

Поиск нужных строк в HTML-файлах по заданному ключу и запись определённых слов из найденных строк в CSV-файл
Есть 100 файлов в папке BDVK с форматом .html Нужно сделать программу которая ищет в html файле по...

17
Программист
307 / 182 / 176
Регистрация: 05.12.2013
Сообщений: 684
Записей в блоге: 5
02.07.2015, 19:50 2
Не понятно. Напишите, что вы хотите получить из вашего примера.
0
0 / 0 / 0
Регистрация: 02.07.2015
Сообщений: 16
02.07.2015, 21:55  [ТС] 3
В 1 мемо к примеру все данные между "---" где есть 24к , 25к - это цена будет
в другом там где рядом не написана цена!
в данном примере с ценой идут 123 и 124 , без цены 125 , 126
0
Модератор
9650 / 6258 / 2427
Регистрация: 21.01.2014
Сообщений: 26,695
Записей в блоге: 3
03.07.2015, 08:22 4
Лучший ответ Сообщение было отмечено KEU как решение

Решение

Ты хотел получить то, что на скрине? Тогда так
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var i : integer;
begin
 for i := 0 to Memo1.Lines.Count - 1 do
  begin
   if Memo1.Lines[i] = '---'
    then begin
          Memo2.Lines.Add(Memo1.Lines[i]);
          Memo3.Lines.Add(Memo1.Lines[i]);
         end
    else begin
          if Pos('-', Memo1.Lines[i]) = 0
           then Memo2.Lines.Add(Memo1.Lines[i])
           else Memo3.Lines.Add(Memo1.Lines[i]);
         end;
  end;
end;
Миниатюры
Обработка данных между определённых строк  
1
0 / 0 / 0
Регистрация: 02.07.2015
Сообщений: 16
03.07.2015, 23:23  [ТС] 5
единственное ,
Тут стирается все данные где нет цены ,
А нужно чтобы результат был таким :
123
123 - 1к
123
---
124 - 24к
124 - 25к
124
---
т.е фишка в том что если между --- есть хоть одна строка где есть цена , она записывается как нужная , а вот если ни одной строки , то тогда уже не нужная!
0
Модератор
9650 / 6258 / 2427
Регистрация: 21.01.2014
Сообщений: 26,695
Записей в блоге: 3
04.07.2015, 21:26 6
Опять же 2 варианта...

Если ненужные выкидываются вообще (скрин 1)
Delphi
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
unit Unit2;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private { Private declarations }
    List : TStringList;
    function Summ_Present : boolean;
    procedure Write_Data;
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.dfm}
 
procedure TForm2.FormCreate(Sender: TObject);
begin
 List := TStringList.Create;
end;
 
procedure TForm2.FormDestroy(Sender: TObject);
begin
 List.Free;
end;
 
procedure TForm2.Button1Click(Sender: TObject);
var i : integer;
begin
 for i := 0 to Memo1.Lines.Count - 1 do
  begin
   List.Add(Memo1.Lines[i]);
   if Memo1.Lines[i] = '---'
    then begin
          if Summ_Present
           then Write_Data;
          List.Clear;
         end;
  end;
 if Summ_Present then Write_Data;
end;
 
function TForm2.Summ_Present: boolean;
var
 i   : integer;
 rez : boolean;
begin
 rez := false;
 for i := 0 to List.Count - 2 do
  if Pos('-', List[i]) <> 0
   then  begin
          rez := true;
          break;
         end;
 Result := rez;
end;
 
procedure TForm2.Write_Data;
var i : integer;
begin
 for i:= 0 to List.Count - 2 do
  Memo2.Lines.Add(List[i]);
 Memo2.Lines.Add('---');
end;
 
end.

Если ненужные сохраняются отдельно (скрин 2)
Delphi
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
unit Unit2;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Memo3: TMemo;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private { Private declarations }
    List : TStringList;
    function Summ_Present : boolean;
    procedure Write_Data(Param : integer);
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.dfm}
 
procedure TForm2.FormCreate(Sender: TObject);
begin
 List := TStringList.Create;
end;
 
procedure TForm2.FormDestroy(Sender: TObject);
begin
 List.Free;
end;
 
procedure TForm2.Button1Click(Sender: TObject);
var i : integer;
begin
 for i := 0 to Memo1.Lines.Count - 1 do
  begin
   List.Add(Memo1.Lines[i]);
   if Memo1.Lines[i] = '---'
    then begin
          if Summ_Present then Write_Data(0) else Write_Data(1);
          List.Clear;
         end;
  end;
 if Summ_Present then Write_Data(0) else Write_Data(1);;
end;
 
function TForm2.Summ_Present: boolean;
var
 i   : integer;
 rez : boolean;
begin
 rez := false;
 for i := 0 to List.Count - 2 do
  if Pos('-', List[i]) <> 0
   then  begin
          rez := true;
          break;
         end;
 Result := rez;
end;
 
procedure TForm2.Write_Data(Param : integer);
var i : integer;
    M : TMemo;
begin
 if Param = 0 then M := Memo2 else M := Memo3;
 
 for i:= 0 to List.Count - 2 do
  M.Lines.Add(List[i]);
 M.Lines.Add('---');
end;
 
end.
Миниатюры
Обработка данных между определённых строк   Обработка данных между определённых строк  
1
0 / 0 / 0
Регистрация: 02.07.2015
Сообщений: 16
24.07.2015, 03:34  [ТС] 7
Ещё раз здравствуйте , сегодня потребовался апгрейд )
Делал Pos запрос с edit-а , всё отлично.
Но возможна ли реализация нескольких запросов?
Пытался найти ответ на форуме. Пробовал делать поиск с memo.lines.text (В едите нет возможности строки добавлять) Но всё оказалось не так просто.
0
Модератор
9650 / 6258 / 2427
Регистрация: 21.01.2014
Сообщений: 26,695
Записей в блоге: 3
24.07.2015, 06:34 8
Сначала то, что я понял в вопросе:
ты пробовал искать вхождение какой-то подстроки в строке, которая вводится в Edit, с помощью функции Pos. У тебя это получилось.
Теперь о том, что непонятно:
Цитата Сообщение от KEU Посмотреть сообщение
В едите нет возможности строки добавлять
Естественно, Edit - однострочный редактор текста (или однострочное поле ввода, как угодно). Для многострочных текстов используются другие компоненты (Мемо, например)
Цитата Сообщение от KEU Посмотреть сообщение
Но возможна ли реализация нескольких запросов?
Вот тут совсем не понял: надо в строке найти вхождения нескольких подстрок или надо найти вхождение подстроки в каждой строке многострочного текста? Если можно, приведи примет исходных данных и что из этого должно получиться после обработки.
0
0 / 0 / 0
Регистрация: 02.07.2015
Сообщений: 16
24.07.2015, 17:49  [ТС] 9
Имеем текст

123
123 - 1к
123
---
124 - 24к
124 - 25к
124
---
125
125 ещё 21
125
---
126 это 24
126

Я пробовал заменить edit на мемо и вписывал туда строки поиска :
-
ещё
это

Надо чтобы в результате в мемо 2 были данные где есть хоть 1 запрос из заданных.
В мемо 3 как и раньше остальные данные где нет нужных данных. В общем всё как и в посте #6
0
Модератор
9650 / 6258 / 2427
Регистрация: 21.01.2014
Сообщений: 26,695
Записей в блоге: 3
24.07.2015, 18:38 10
Идею понял... Еще один уточняющий вопрос: в файле сначала идут трехзначные числа. Так вот, они обязательно трехзначные или могут быть 2-х, 4-х и т.д. -значные?

Добавлено через 6 минут
И, кстати, вот еще что подумалось...
Поменяй-ка ты в функции Summ_Present вот эту вот строчку
Delphi
1
if Pos('-', List[i]) <> 0
на такую
Delphi
1
if Pos(' ', Trim(List[i])) <> 0
и должно заработать, попробуй, у самого сейчас Delphi под рукой нет проверить.
0
0 / 0 / 0
Регистрация: 02.07.2015
Сообщений: 16
24.07.2015, 22:01  [ТС] 11
Нет , значения могут быть скольки угодно значные.

Как только я ввожу более чем один запрос. Ни находит ни одного (если один написать , то найдёт)
Миниатюры
Обработка данных между определённых строк  
0
Модератор
9650 / 6258 / 2427
Регистрация: 21.01.2014
Сообщений: 26,695
Записей в блоге: 3
25.07.2015, 06:19 12
Ты попробовал тот код, из поста 6, изменить так как я написал в 10-м?
0
Модератор
9650 / 6258 / 2427
Регистрация: 21.01.2014
Сообщений: 26,695
Записей в блоге: 3
25.07.2015, 20:51 13
Судя по всему - нет, т.к. это срабатывает безо всяких перечислений разделителей.
Миниатюры
Обработка данных между определённых строк  
0
0 / 0 / 0
Регистрация: 02.07.2015
Сообщений: 16
03.08.2015, 00:21  [ТС] 14
В итоге код с 10 поста такой
Delphi
1
if Pos(memo4.Lines.Text, Trim(List[i])) <> 0
Но я видимо что-то упускаю , т.к запрос фильтруется ,а несколько нет.
(Может их нужно вводить не 1запрос-строка , а как-то иначе?)
0
пофигист широкого профиля
4757 / 3194 / 860
Регистрация: 15.07.2013
Сообщений: 18,491
03.08.2015, 01:13 15
Цитата Сообщение от KEU Посмотреть сообщение
В итоге код с 10 поста такой
Код Delphi
Выделить код
1
if Pos(memo4.Lines.Text, Trim(List[i])) <> 0
Но я видимо что-то упускаю , т.к запрос фильтруется ,а несколько нет.
(Может их нужно вводить не 1запрос-строка , а как-то иначе?)

Не по теме:

Что курил, перед тем как запостить сей вопрос?

0
Модератор
9650 / 6258 / 2427
Регистрация: 21.01.2014
Сообщений: 26,695
Записей в блоге: 3
03.08.2015, 07:36 16
Цитата Сообщение от KEU Посмотреть сообщение
В итоге код с 10 поста такой
А если внимательно перечитать пост 10? Да еще не забыть посмотреть на код в посте 6
0
0 / 0 / 0
Регистрация: 02.07.2015
Сообщений: 16
10.08.2015, 21:21  [ТС] 17
Уловил , вы обошли поиск обычным пробелом. Но мне этот метод не подходит , т.к чаще всего мне нужно вводить нужные мне символы. Если работать с моим примером выше , то как быть есть мне нужен результат только с "-" и "ещё" , а остальное в файл с остатком?
Тем более работать нужно будет с 3-6 запросами , а пробелов будет куча.
0
Модератор
9650 / 6258 / 2427
Регистрация: 21.01.2014
Сообщений: 26,695
Записей в блоге: 3
12.08.2015, 06:29 18
KEU, все задачу догнал, как говорится...
Исправленый вариант
Delphi
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
unit Unit2;
 
interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
 
type
  TForm2 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    Memo2: TMemo;
    Memo3: TMemo;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Memo4: TMemo;
    Label6: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private { Private declarations }
    List : TStringList;
    function Summ_Present : boolean;
    function Checks : boolean;
    procedure Write_Data(Param : integer);
  public
    { Public declarations }
  end;
 
var
  Form2: TForm2;
 
implementation
 
{$R *.dfm}
 
function TForm2.Checks: boolean;
var i : integer;
begin
 if Memo4.Lines.Count = 0
  then begin
        ShowMessage('Не указаны разделители!');
        Checks := false;
        Exit;
       end;
 for i := 0 to Memo4.Lines.Count - 1 do
  if Length(Trim(Memo4.Lines[i])) = 0
   then begin
        ShowMessage('Пробел не может являться разделителем!');
        Checks := false;
        Exit;
       end;
 Checks := true;
end;
 
procedure TForm2.FormCreate(Sender: TObject);
begin
 List := TStringList.Create;
end;
 
procedure TForm2.FormDestroy(Sender: TObject);
begin
 List.Free;
end;
 
procedure TForm2.Button1Click(Sender: TObject);
var i : integer;
begin
 Memo2.Clear;
 Memo3.Clear;
 if Checks then
  for i := 0 to Memo1.Lines.Count - 1 do
   begin
    if Memo1.Lines[i] = '---'
     then begin
           if Summ_Present then Write_Data(0) else Write_Data(1);
           List.Clear;
          end
    else List.Add(Memo1.Lines[i]);
   end;
end;
 
function TForm2.Summ_Present: boolean;
var
 i, j  : integer;
 rez   : boolean;
 Delim : string;
begin
 rez := false;
 for i := 0 to List.Count - 1 do
  for j := 0 to Memo4.Lines.Count - 1 do
   begin
    Delim := Trim(Memo4.Lines[j]);
    if Pos(Delim, List[i]) <> 0
     then  begin
            rez := true;
            break;
           end;
   end;
 Result := rez;
end;
 
procedure TForm2.Write_Data(Param : integer);
var
 M : TMemo;
 i : integer;
begin
 if Param = 0 then M := Memo2 else M := Memo3;
 for i:= 0 to List.Count - 1 do
  M.Lines.Add(List[i]);
 M.Lines.Add('---');
end;
 
end.
Миниатюры
Обработка данных между определённых строк  
1
12.08.2015, 06:29
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.08.2015, 06:29
Помогаю со студенческими работами здесь

Обработка строк данных
Дана последовательность 15 символов, размещенная по адресу DS:0000h. Переписать эту строку в другое...

Навигация между jsp и обработка данных
У меня есть jsp страница. После ввода пользователем ряда данных в форму расположенную на этой jsp...

Строковый тип данных. Обработка строк
Найти в предложении слова, которые начинаются на одну и ту же букву.

Строковые типы данных. Обработка строк
Помогите написать вот такую программу: Системы исчисления. Вводится строка символов. Если...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач. . . .
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru