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

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

29.07.2014, 12:52. Показов 4422. Ответов 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
9951 / 6486 / 2461
Регистрация: 21.01.2014
Сообщений: 27,481
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru