Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.08.2014, 16:09   #11
kate158
Форумчанин
 
Регистрация: 01.08.2008
Сообщений: 383
По умолчанию

Аватар, я не могу догнать, как найти двоичные нули в файле?
kate158 вне форума Ответить с цитированием
Старый 28.08.2014, 16:09   #12
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,761
По умолчанию

Если у Вас фиксированное кол-во нулей в каждом файле, а именно 5804, то просто обрежьте файл через TFileStream.
FaTaL вне форума Ответить с цитированием
Старый 28.08.2014, 16:20   #13
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
var Stream: TMemoryStream;
    b,b0: Byte;
begin
  Stream:=TMemoryStream.Create;
  Stream.LoadFromFile('e:\80020_1001000012_20140826_18353.xml');
  Stream.Position:=Stream.Size-1;
  b0:=Ord(' ');
  Stream.Read(b,1);
  while b=0 do begin
    Stream.Position:=Stream.Position-1;
    Stream.Write(b0,1);
    Stream.Position:=Stream.Position-2;
    Stream.Read(b,1);
  end;
  XMLDocument1.LoadFromStream(Stream);
  Stream.Free;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.08.2014, 16:28   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

обрезать лишнее можно и так:

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  tf : TFileStream;
  i : integer;
  S, S2 : AnsiString;
  XmlDocNode, XmlAttr : IXMLNode;
  fn : string;
  od : TOpenDialog;
  mainNode: IXMLNode;
  nodes: IXMLNodeList;
begin
  Od := OpenDialog1;
  if Od.InitialDir = '' then
    Od.InitialDir := ExtractFilePath(Application.ExeName);
  if not Od.Execute then Exit;
  fn := Od.FileName;
  if not FileExists(fn) then begin
    ShowMessage('Файл с заданным именем не существует. Действие отменено');
    Exit;
  end;

  tf := TFileStream.Create(fn,fmOpenRead);
  try
  SetLength(S, tf.Size);
  tf.Read(S[1], tf.Size);
  S2 := '';
  for i := 1 to Length(S) do
     if S[i]<>#0 then S2 := S2 + S[i];
  finally
    FreeAndNil(tf);
  end;


  XMLDocument1.LoadFromXML(S2);
  XMLDocument1.Active := True;
...
но проблема в том, что потом в цикле по nodes возникает ошибка "Element does not contain a single text node"

что это за ошибка я не знаю, с XML опыта нет...

добавлено
похоже, что ошибка говорит о том, что нельзя пытаться получить NodeValue у узла, которые имеет потомков!
Цитата:
не стоит читать свойство НодеВалуе у узла, имеющего чайлд-узлы, ибо
Otherwise, trying to read or set NodeValue causes an exception.
Код:
        For i := 0 To nodes.Count -1 Do
                 memo1.Lines.Add(inttostr(i)+' '+Nodes.Get(i).NodeName);

Последний раз редактировалось Serge_Bliznykov; 28.08.2014 в 16:36.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами: запись, добавление, чтение (найти ошибку в коде) / C для начинающих Надо создать программу для работы с файлами Konlor Общие вопросы C/C++ 2 18.05.2014 12:37
работа с xml файлами в MVS 2008 Professor_DU Visual C++ 4 28.01.2013 12:38
работа с xml файлами Professor_DU Общие вопросы C/C++ 0 24.01.2013 20:07
[php] Работа с XML файлами dolci2006 PHP 0 20.04.2010 16:54
Работа с xml файлами Rstud Общие вопросы .NET 1 04.01.2010 12:47