Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Парсинг строк

Ответить
Настройки темы
Delphi - [решено] Парсинг строк

Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Вложения
Тип файла: 7z prim.7z
(783 байт, 4 просмотров)
Всем привет! Нужна помощь! Имеем текст (сам текст прикрепил к сообщению).
В нём есть колонки Date Time Attr Size Compressed Name со списком. Нужно после парсинга , чтобы я мог выводить отдельно по желанию список каждой колонки в memo например
Пример :
Код: Выделить весь код
 
Список колонки Name:
------------------- 
sevenzip
sevenzip\Win32
sevenzip\Win32\Debug
sevenzip\__history
sevenzip\__recovery
sevenzip\Project1.dproj
 sevenzip\Project1.dproj.local
sevenzip\Project1.identcache
sevenzip\Project1.res
sevenzip\Project1.stat
....
У меня получилось вывести список под Date, Time , Attr, Size, а вот с колонками Compressed, Name проблемы , так как в колонке Compressed есть пустые строки и у меня колонки Compressed и Name совмещаются =(

Мой код :
Код: Выделить весь код
procedure TForm1.Button2Click(Sender: TObject);
VAR
F,D: TStringList;
I:INTEGER;
begin
d := TStringList.Create;
F:= TStringList.Create;
d.LoadFromFile('C:\ping.txt');
d.Delete(D.Count-1);
d.Delete(D.Count-1);
for i := 19 to D.Count-1 do BEGIN
F.Clear;
F.CommaText:= D.Strings[i];
MEMO1.Lines.Add(F.Strings[4]);
END;
F.Free;
d.Free;
end;
end.

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Отправлено: 18:29, 29-09-2018

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Painkiller, читайте из файла построчно, затем делите каждую строку тупо по позициям.

Отправлено: 19:11, 29-09-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Iska, а я что делаю ? Проблема в том, что я не знаю, что делать, если в колонке пустые строки. Как реализовать, чтобы пустые строки в колонке игнорировались?

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Последний раз редактировалось Painkiller, 29-09-2018 в 19:59.


Отправлено: 19:28, 29-09-2018 | #3


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Зная Вашу особенность разбираться во всем самому, просто советую, посмотрите на следующие функции и свойства в Delphi:
- разделение строки
1. Classes.TStrings.DelimitedText, Classes.TStrings.StrictDelimiter
2. Classes.ExtractStrings
3. StrUtils.SplitString
- пустые строки
1. Lenght()

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 23:09, 29-09-2018 | #5


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата opel431:
- пустые строки
1. Lenght() »
Да нет там у него никаких «пустых строк». Он вместо того, чтобы извлекать из строк:
Примеры таких строк (из приложенного выше файла
Код: Выделить весь код
2018-08-13 01:15:31 D....            0            0  sevenzip
2018-08-05 01:56:56 D....            0            0  sevenzip\Win32
2018-08-05 03:33:09 D....            0            0  sevenzip\Win32\Debug
2018-08-05 03:30:27 D.H..            0            0  sevenzip\__history
2018-08-13 01:15:31 D.H..            0            0  sevenzip\__recovery
2018-08-05 01:56:56 ....A          234        88306  sevenzip\Project1.dpr
2018-08-05 01:56:55 ....A        29458               sevenzip\Project1.dproj
2018-08-05 01:56:56 ....A         2457               sevenzip\Project1.dproj.local
2018-08-13 01:15:31 ....A           63               sevenzip\Project1.identcache
2018-08-05 01:56:56 ....A        59412               sevenzip\Project1.res
2018-08-13 01:15:31 ....A          163               sevenzip\Project1.stat
2016-12-09 23:46:18 ....A        69906               sevenzip\sevenzip.pas
2018-08-05 03:14:40 ....A          623               sevenzip\Unit1.dfm
2018-08-05 03:25:14 ....A         1025               sevenzip\Unit1.pas
2018-08-05 01:57:30 ....A        76147               sevenzip\Win32\Debug\sevenzip.dcu
2018-08-05 03:30:28 ....A         6466               sevenzip\Win32\Debug\Unit1.dcu
2018-08-05 01:56:50 ....A          329               sevenzip\__history\Unit1.dfm.~1~
2018-08-05 01:56:56 ....A          361               sevenzip\__history\Unit1.pas.~1~
2017-04-29 13:15:12 ....A      1099776      2471456  sevenzip\Win32\Debug\7z.dll
2018-08-13 01:12:53 ....A     11234841               sevenzip\Win32\Debug\Project1.exe

подстроки фиксированной длины, пытался сплитить эти строки по разделителю. И, поскольку число получаемых таким образом элементов для разных строк было различным, закономерно на некоторых строках получал ошибку Index out of range при попытке обращения к элементу по несуществующему индексу.
Это сообщение посчитали полезным следующие участники:

Отправлено: 23:30, 29-09-2018 | #6


Аватара для Painkiller

Ветеран


Автор проектов


Сообщения: 1158
Благодарности: 382

Профиль | Отправить PM | Цитировать


Цитата opel431:
1. Classes.TStrings.DelimitedText, Classes.TStrings.StrictDelimiter
2. Classes.ExtractStrings
3. StrUtils.SplitString
- пустые строки
1. Lenght() »
Я всё это и кучу других функций перепробовал, результат был не тот, что хотелось и ошибок не было. Просто в колонке где было пусто сдвигались строки с другой колонки. А решил я свою проблему перебором строк + функцией Copy ( S; Index, Count: Integer ): string + кое где StringReplace;
Цитата Iska:
Да нет там у него никаких «пустых строк». Он вместо того, чтобы извлекать из строк: »
Есть строки, слепые что ли ? От Compressed в txt файле вниз посмотрите
Тут вопрос решён.
opel431, у меня теперь другая проблема . Например задаю размер файла в ProgressBar1.Max и получаю ошибку, например размер файла ProgressBar1.Max =28500915651, я так понял превысил максимально допустимое значение, так как с короткими всё гуд. Как решить ? Пока не придумал. =( Int64 тоже не помогает

-------
http://wiki.oszone.net/images/0/03/UserbarAAA4.gif


UpdatePack 7 для интеграции обновлений в образ Windows 7 SP1 [X86\64]

UpdatePack 8.1 для интеграции обновлений в образ Windows 8.1 [X86\64]

UpdatePack 10 для интеграции обновлений в образ Windows 10 [X86\64]


Последний раз редактировалось Painkiller, 30-09-2018 в 02:17.


Отправлено: 02:11, 30-09-2018 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата Painkiller:
Есть строки, слепые что ли ? От Compressed в txt файле вниз посмотрите »
Там нет «пустых строк». Которые бы требовалось «игнорировать». Там есть пробелы.

Цитата Painkiller:
А решил я свою проблему перебором строк + функцией Copy ( S; Index, Count: Integer ): string »
Что и требовалось — извлекать подстроки с фиксированных позиций, а не делить по разделителю.

Отправлено: 07:48, 30-09-2018 | #8


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


"Пустые строки", имелось ввиду "пустые" подстроки в строке, которые при парсинге добавляются в массив строк, уже как строка.

Вам видимо нужно сохранять общее количество строк в колонках (SL.Count)? Что Вам мешает заменить пустую строку на приемлемый для Вас результат
Код: Выделить весь код
if s = '' then //или Lenght(s)
s := 'empty str'; //или s := '--------'
Цитата Painkiller:
у меня теперь другая проблема . Например задаю размер файла в ProgressBar1.Max и получаю ошибку, например размер файла ProgressBar1.Max =28500915651, я так понял превысил максимально допустимое значение, так как с короткими всё гуд. Как решить ? »
А зачем вам побайтно выводить результат? Разделите полученный размер файла, например, на 1024 (килобайт) и добавьте в свойство PB
Код: Выделить весь код
pb1.Max := Round(size / 1024);
или просто, используйте свойство pb1.Style =pbstMarquee

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 30-09-2018 в 11:00.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:43, 30-09-2018 | #9


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Цитата opel431:
"Пустые строки", имелось ввиду "пустые" подстроки в строке, которые при парсинге добавляются в массив строк, уже как строка. »
Так не было этого-то.
Это сообщение посчитали полезным следующие участники:

Отправлено: 12:08, 30-09-2018 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - [решено] Парсинг строк

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Удаление из txt файлов не нужных строк и дубликатов строк. voler Скриптовые языки администрирования Windows 1 26-02-2018 14:10
CMD/BAT - [решено] Удаление пустых строк, пробелов и/или конца строк blackeangel Скриптовые языки администрирования Windows 12 11-03-2016 21:49
CMD/BAT - Поиск слова в тексте, удаление строки, удаление 8 строк выше и 3 строк ниже Alk-13 Скриптовые языки администрирования Windows 0 10-02-2012 18:06
CMD/BAT - Парсинг Чин Хон Скриптовые языки администрирования Windows 1 04-02-2011 13:51
Delphi - Парсинг Miko Программирование и базы данных 7 27-09-2010 10:46




 
Переход