Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
0 / 0 / 0
Регистрация: 29.07.2014
Сообщений: 8

Delphi7 Перенос текста из Memo в StringGrid

29.07.2014, 12:52. Показов 4478. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Помогите пожалуйста решить проблему. У меня задание по учебной практике сделать проект где загружаешь текстовый файл телеметрии в Memo, а потом оттуда надо все скопировать в Stringgrid стоящий рядышком. проблема в том что, текст имеет очень большой размер около сотни тысяч строк, при этом мне еще надо чтобы все было в своей ячейке. Вот пример текста(одна из строчек).
Event Device Parameter Time Date User\Origin
Commanded Azimuth has changed ACU1 Commanded Azimuth: 195.730° 01:00:07 01.07.2014 MAC-Server

Еще есть проблемочка, что при загрузке из Memo в Stringgrid он грузит ну ооочень долго, минут 10-15, потом выдает ошибку типа "Out Of Memory", ну а если загружать маленький текст все загружает нормально, но не делит по столбикам.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.07.2014, 12:52
Ответы с готовыми решениями:

Перенос текста информации из StringGrid и Memo в Microsoft Word маркерами
Здравствуйте. При разработке курсового проекта у меня возникла проблема с транспортировкой информации из Delphi в Microsoft Word. У меня...

Delphi7 вставка текста из поля Memo в MS Word
Вечер добрый форумчане! Решил немного автоматизировать свою рабочую деятельность, и вот встал у меня вопрос, есть ли возможность из поля...

Перенос текста из Memo в Memo (Drag&Drop)
Подскажите как осуществить перетаскивание текста из memo в memo в с++ builder???

21
Модератор
 Аватар для D1973
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,498
Записей в блоге: 3
31.07.2014, 07:25
Студворк — интернет-сервис помощи студентам
Ну, а кусок файла выложить? Или это страшная военная тайна?
0
 Аватар для Mawrat
13117 / 5898 / 1708
Регистрация: 19.09.2009
Сообщений: 8,809
31.07.2014, 11:57
Code
1
2
Event   Device  Parameter   Time    Date    User\Origin
Commanded Azimuth has changed   ACU1    Commanded Azimuth: 195.730°    01:00:07    01.07.2014  MAC-Server
В этом тексте значения полей отделяются друг от друга знаком табуляции: #9. Исходя из этого, можно вычленять значения полей.
Вот таким образом можно сделать. Здесь исходный текст берётся из Memo1, результат разбора записывается в Memo2. Код можно переделать для работы с файлами.
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
uses
  Classes;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  Sl : TStringList;
  S : String;
  i, Cnt : Integer;
begin
  //Создаём список. В этот список мы будем записывать значения полей, взятые из текущей строки.
  Sl := TStringList.Create;
  //Очистка Memo2. В Memo2 будем выводить результаты разбора строк.
  Memo2.Clear;
  //Обработка строк. Исходный текст записан в Memo1.
  //Первую строку пропускаем (i = 0) - там заголовки столбцов.
  for i := 0 + 1 to Memo1.Lines.Count - 1 do
  begin
    Sl.Clear;
    //Извлекаем из текста части и записываем их в список Sl.
    ExtractStrings([#9], [], PChar(Memo1.Lines[i]), Sl);
    //Выполняем разбор строки.
    S := '';
    Cnt := Sl.Count;
    //Здесь цикл repeat используется для замены оператора if с большой вложенностью.
    repeat
      Memo2.Lines.Add('----------');
      if 0 = Cnt then
        Break;
      Memo2.Lines.Add('Event = "' + Trim(Sl[0]) + '"');
      if 1 = Cnt then
        Break;
      Memo2.Lines.Add('Device = "' + Trim(Sl[1]) + '"');
      if 2 = Cnt then
        Break;
      Memo2.Lines.Add('Parameter = "' + Trim(Sl[2]) + '"');
      if 3 = Cnt then
        Break;
      Memo2.Lines.Add('Time = "' + Trim(Sl[3]) + '"');
      if 4 = Cnt then
        Break;
      Memo2.Lines.Add('Date = "' + Trim(Sl[4]) + '"');
      if 5 = Cnt then
        Break;
      Memo2.Lines.Add('User\Origin = "' + Trim(Sl[5]) + '"');
    until True;
  end;
  //Уничтожаем список.
  FreeAndNil(Sl);
end;
Результат работы программы.
Исходный текст в Memo1:
Code
1
2
3
4
Event   Device  Parameter   Time    Date    User\Origin
Commanded Azimuth has changed   ACU1    Commanded Azimuth: 195.730°    01:00:07    01.07.2014  MAC-Server
Commanded Temperature has tested    TCU1    Get Temperature: -100.05°  01:01:12    01.07.2014  MAC-Server
Commanded Illumination has tested   LCU1    Get Illumination: 135000LUX 01:03:46    01.07.2014  MAC-Server
Результат разбора в Memo2:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
----------
Event = "Commanded Azimuth has changed"
Device = "ACU1"
Parameter = "Commanded Azimuth: 195.730°"
Time = "01:00:07"
Date = "01.07.2014"
User\Origin = "MAC-Server"
----------
Event = "Commanded Temperature has tested"
Device = "TCU1"
Parameter = "Get Temperature: -100.05°"
Time = "01:01:12"
Date = "01.07.2014"
User\Origin = "MAC-Server"
----------
Event = "Commanded Illumination has tested"
Device = "LCU1"
Parameter = "Get Illumination: 135000LUX"
Time = "01:03:46"
Date = "01.07.2014"
User\Origin = "MAC-Server"
Надо учесть ещё такую особенность - функция ExtractStrings() разделителями считает не только те знаки, которые указаны при вызове, но ещё и следующие знаки: [#0, #13, #10, '''', '"']. Поэтому, если знаки '''', '"' присутствуют в тексте (например ' - угловая минута, '' - угловая секунда), то для разбора нужно предпринять дополнительные меры.
Кроме этого, разными методами можно повысить скорость разбора.

Добавлено через 1 час 25 минут
Цитата Сообщение от Ануар Посмотреть сообщение
Перенос текста из Memo в StringGrid
Если значения надо записывать в таблицу типа TStringGrid:
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
//Очистка таблицы. Строки очищаем, т. к. только сброс количества строк - это недостаточная мера.
procedure SgClear(aSg : TStringGrid);
var
  i : Integer;
begin
  for i := 0 to aSg.ColCount - 1 do
    aSg.Cols[i].Clear;
  aSg.RowCount := aSg.FixedRows + 1;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
  i, j : Integer;
  Sg : TStringGrid;
begin
  //Таблица, в которую будем записывать извлечённые данные.
  Sg := StringGrid1;
  SgClear(Sg);
  Sg.RowCount := Memo1.Lines.Count;
  //Обработка строк. Исходный текст берём из Memo1.
  for i := 0 to Memo1.Lines.Count - 1 do
  begin
    //Извлекаем из текста части и записываем их в очередную строку таблицы.
    ExtractStrings([#9], [], PChar(Memo1.Lines[i]), Sg.Rows[i]);
    //Удаляем обрамляющие пробелы.
    for j := 0 to Sg.ColCount - 1 do
      Sg.Cells[j, i] := Trim(Sg.Cells[j, i]);
  end;
end;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.07.2014, 11:57

Выписывание текста из StringGrid в Memo
Подскажите пожалуйста, в StringGrid введен текст(побуквенно в каждую ячейку), как в Memo2 выписать буквы из столбца, номер которого...

FastReport 4: перенос текста в memo
Мне необходимо программно при нажатии на кнопку на форме внести текст в memo4 который находится в fastreport. Прошу помощи. Добавлено...

Выделение и перенос выделенных строк из DBGrid в memo или StringGrid c дальнейшем построением отчёта
Добрый день всем! Имеется DBGrid c записями,необходимо: 1) Выделять записи в гриде, с помощью ctr+мышка и как то подсвечивать...

Перенос текста в ячейках StringGrid
Нашел дельфиский код c использованием API procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer; Rect: TRect;...

Перенос текста из memo-поля формата rtf в Word
На форме есть поле, которое содержит данные типа Memo с форматом текста rtf. В Word-е создан шаблон с закладкой, на ее место хочу перенести...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru