Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TXMLDocument и переодич. сохранение 
V
    Опции темы
Antony41
Дата 19.10.2012, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Здрасти короче суть такая:
Вчера написал прогу выдирающую информацию о фильмах с сайта и публикующую её на сервере HMS для просмотра на рессивере.
Информация выдергивается и сохраняется в XML на диске.
оставил на ночь выдерать информацию проснулся смотрю ошибка переполнения буфера.

стало понятно что с таким объемом информации нельзя работать в буфере.

Код

with XML.AddChild('HmsMediaItem') do
        begin
          ChildValues['ClassID'] := '51';
          with XML.AddChild('HmsMediaItem') do
               {...} 
        end;


Попробовал через Append с текстовым файлом, но где то какой то тег не закрывается, и в итоге отображается не все данные, а вроде как теги прописал все, короче разобрать такой неструктурированный файл не смог ни я, ни Notepad++ с синтаксическим анализом XML.

Как можно решить эту задачу? нужно как то сохранять блоками что ли.
Помогите разобраться плиз.

Это сообщение отредактировал(а) Antony41 - 19.10.2012, 17:43
PM MAIL   Вверх
MetalFan
Дата 19.10.2012, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: нет
Всего: 128



Возникло ощущение, что ТС сам себе на уме... я конечно понимаю, что задача стала "родной", но можно чуть больше подробностей, если конечно хочешь получить адекватный ответ.
Цитата(Antony41 @  19.10.2012,  17:41 Найти цитируемый пост)
стало понятно что с таким объемом информации нельзя работать в буфере.

Каким образом стало понятно? в каком буфере?


Цитата(Antony41 @  19.10.2012,  17:41 Найти цитируемый пост)
Попробовал через Append с текстовым файлом

что и как пробовал?


Цитата(Antony41 @  19.10.2012,  17:41 Найти цитируемый пост)
Как можно решить эту задачу?

не вижу четко поставленно задачи.

что-то делаешь, что-то не сохраняется или сохраняется не так.
телепат в отпуске)


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
lomaster
Дата 19.10.2012, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: 1
Всего: 2



Базу надо брать и не морочить голову ни себе ни людям.  smile
PM   Вверх
MetalFan
Дата 19.10.2012, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: нет
Всего: 128



lomaster, так проблема в том видимо, что нужен именно xml, который читается на ресивере...
Так это, может отказаться от TXMLDocument, а формировать XML вручную? тем более, как я понимаю, он не сильно то и сложный.


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Antony41
Дата 19.10.2012, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Цитата(MetalFan @  19.10.2012,  17:56 Найти цитируемый пост)
Каким образом стало понятно? в каком буфере?

Ну вот аналогичный пример
если я создам TStringList и буду бесконечно добавлять данные через
StringList.add(Text); то рано или поздно произойдет переполнение буфера так или нет?

Цитата(MetalFan @  19.10.2012,  17:56 Найти цитируемый пост)
что и как пробовал?

через append примерно так
Код

var
  AFile: TextFile;
  i, PageCount: Integer;
begin
  AssignFile(AFile, 'C:\Test.txt');
  ReWrite(AFile);
  try
    Writeln(AFile, '<Folder>');
      try
        CloseFile(AFile);
        Append(AFile); //открыть для добавления в конец
        for i := 0 to PageCount - 1 do //PageCount уже определен
          begin
            Writeln(AFile, '<Page>');
            try
              //ну и т.д
            finally
              Writeln(AFile, '</Page>');
            end;
          end;
      finally
        Writeln(AFile, '</Folder>');
      end;
  finally
    CloseFile(AFile);
  end;


Цитата(lomaster @  19.10.2012,  18:06 Найти цитируемый пост)
Базу надо брать и не морочить голову ни себе ни людям

Мне не приходится выбирать что использовать базу или XML просто программа в которую отсылается этот файл работает имеено со стандартом XML.
PM MAIL   Вверх
lomaster
Дата 19.10.2012, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: 1
Всего: 2



Ну и формируйте его когда отсылаете. Вы его что, посекундно шлёте?
PM   Вверх
Antony41
Дата 19.10.2012, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



так вот я и пытаюсь его уже вручную сформировать

где то непонятно где какойто тег не закрывается что ли или не в то место суется
вобщем в файле xml прописаны 20-30 страниц на каждой странице папки с названием фильма в каждой папке с фильмом ссылки на файлы
например Комедии>страница 1>название фильма>ссылка 1, ссылка 2, ссылка 3

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

При использовании XMLDocument'а добавляется всё но нельзя работать со страницами содержащими большое кол-во фильмов.

Добавлено через 1 минуту и 59 секунд
Цитата(lomaster @  19.10.2012,  18:54 Найти цитируемый пост)
Ну и формируйте его когда отсылаете. Вы его что, посекундно шлёте?

Так я и говорю что такое кол-во информации не получается формировать по окончанию. Предполагаю что XML на выходе может весить метров 500 а может и больше...

Добавлено через 6 минут и 30 секунд
мне надо что бы программа в процессе работы сохраняла данные для того чтобы память с работой XMLDocument'а не переполнялась
например так 
Код

XMLDocument.XML.Clear;
//и поехали дальше...
 
но таким образом теряется вся структура...(
PM MAIL   Вверх
lomaster
Дата 19.10.2012, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: 1
Всего: 2



Отсылайте чаще. smile
А ваще посмотрите в сторону других парсеров, например SAX.
PM   Вверх
Antony41
Дата 19.10.2012, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Цитата(lomaster @  19.10.2012,  19:07 Найти цитируемый пост)
Отсылайте чаще.

Да не отсылаю я его.
Моя прога выдерает инфу с инета сохраняет в файл, а потом я ручками выбираю этот файл в программе просмотра
PM MAIL   Вверх
lomaster
Дата 19.10.2012, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 101
Регистрация: 27.5.2012

Репутация: 1
Всего: 2



Цитата

просто программа в которую отсылается этот файл

Цитата

Да не отсылаю я его.

то отсылается, то не отсылается. вы определитесь и расскажите чего надо.
PM   Вверх
Antony41
Дата 19.10.2012, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Цитата(lomaster @  19.10.2012,  19:12 Найти цитируемый пост)
просто программа в которую отсылается этот файл

имеется ввиду вручную отсылается через меню File>Open File...

Цитата(lomaster @  19.10.2012,  19:12 Найти цитируемый пост)
Да не отсылаю я его.

имеется ввиду автоматически не отсылаю

Суть не в том отсылаю я его или нет мне нужно что то типа блочного сохранения.

Это сообщение отредактировал(а) Antony41 - 19.10.2012, 19:22
PM MAIL   Вверх
Antony41
Дата 19.10.2012, 19:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



возможен ли такой вариант строить дерево и данные через XMLDocument, а блочно сохранять через Stream?
Код

procedure TMain.Button1Click(Sender: TObject);
var
  AFile:TextFile;
  MS: TMemoryStream;
  FS: TFileStream;
begin
  AssignFile(AFile, '123.xml');
  Rewrite(AFile);
  WriteLn(AFile, '<Tag1>');
  WriteLn(AFile, '<Tag2>');
  CloseFile(AFile);

  XML.Active := True; 
  MS := TMemoryStream.Create; //создаем поток в памяти
  with XML.AddChild('MyStruct') do //строим структуру с помощью TXMLDocument
    begin
      ChildValues['ID'] := 'MYID';
      ChildValues['Value'] := 'MYVALUE';
    end;
  XML.SaveToStream(MS); //сохраняем структуру в поток MS
  FS:= TFileStream.Create('123.xml', fmOpenWrite); //открывам наш файл в потоке для записи
  FS.Position := FS.Size; //переходим в конец потока
  FS.CopyFrom(MS, 0); //копируем из потока MS в поток FS таким образом добавляем структуру в конец потока FS
  FreeAndNil(FS);
  FreeAndNil(MS);

  Append(AFile);
  WriteLn(AFile, '</Tag1>');
  WriteLn(AFile, '</Tag2>');
  CloseFile(AFile);
end;



Это сообщение отредактировал(а) Antony41 - 21.10.2012, 02:40
PM MAIL   Вверх
MetalFan
Дата 20.10.2012, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: нет
Всего: 128



Цитата(Antony41 @  19.10.2012,  18:46 Найти цитируемый пост)
через append примерно так

Цитата(Antony41 @  19.10.2012,  18:46 Найти цитируемый пост)
  ReWrite(AFile);
  try
    Writeln(AFile, '<Folder>');
      try
        CloseFile(AFile);
        Append(AFile); //открыть для добавления в конец

И в чем возникла проблема? не читаемый XML на выходе? перепроверь код, все должно работать.
Не понял, зачем закрывать только что открытый файл и открывать его через Append?



--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Antony41
Дата 20.10.2012, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 27.12.2008

Репутация: нет
Всего: 1



Цитата(MetalFan @  20.10.2012,  09:11 Найти цитируемый пост)
не читаемый XML на выходе

в том то и дело что не читаемый, и еще огромный, сидел часа 3-4 но ошибку найти так и не смог запутался только.


Цитата(MetalFan @  20.10.2012,  09:11 Найти цитируемый пост)
Не понял, зачем закрывать только что открытый файл и открывать его через Append?

ну там выше в коде было Rewrite(AFile);
разве не нужно его закрыть перед Append

или вы хотите сказать что можно и так?
Код

AssignFile(AFile, '123.txt');
Rewrite(AFile);
WriteLn(AFile, 'строка1');
WriteLn(AFile, 'строка2');
append(AFile);
WriteLn(AFile, 'строка3');
WriteLn(AFile, 'строка4');
CloseFile(AFile);


Добавлено через 7 минут и 1 секунду
c append'ом разобрался пардон не прав!
PM MAIL   Вверх
MetalFan
Дата 20.10.2012, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Аццкий Сотона
****


Профиль
Группа: Комодератор
Сообщений: 3815
Регистрация: 2.10.2006
Где: Moscow

Репутация: нет
Всего: 128



Цитата(Antony41 @  20.10.2012,  10:30 Найти цитируемый пост)
c append'ом разобрался пардон не прав! 

ии? все равно не работает?


--------------------
There are always someone smarter than you...
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0563 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.