Страница 3 из 8 ПерваяПервая 12345 ... ПоследняяПоследняя
Показано с 21 по 30 из 74

Тема: архивирование на спк207

  1. #21

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    переведите весь файл не в строки а в массив байт и ищите конец строки, сколько раз встретите от начала на столько строк и спустились ниже
    т.е в функции FILE.Read использовать буфер определенный как масив с данными wstring?

  2. #22
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    Неглядел на работу бибки,но вроде в стандартной и так для чтения используется указатель и какая разница на что, на строку или на массив байт. Может и ошибаюсь, пока не могу до КДС35 добраться

  3. #23

    По умолчанию

    Да, действительно, функциональному блоку чтения файла(FILE.Read) можно подать на вход указатель на массив байт.
    Далее проанализировав массив байт найти начало и конец нужной строки.
    Далее установить позицию чтения (FILE.Setpos), длину читаемой строки и повторно считать нужную строку (FILE.Read) в буфер типа String[255].

  4. #24

    По умолчанию

    Добрый день. Хочу внести одно небольшое, но крайне значимое замечание.
    Если вдруг в файле по какой либо причине встретятся два последовательных байта, значения которых равняются нулю, то при чтении данных в формате string вы часть данных не увидите/потеряете, т.к. два нулевых байта подряд признак конца строки.

  5. #25
    Пользователь Аватар для capzap
    Регистрация
    25.02.2011
    Адрес
    Киров
    Сообщений
    10,243

    По умолчанию

    http://ru.wikipedia.org/wiki/%D0%9F%...BE%D0%BA%D0%B8 не нашел про два нулевых байта для текстовых документов
    Bad programmers worry about the code. Good programmers worry about data structures and their relationships

    среди успешных людей я не встречала нытиков
    Барбара Коркоран

  6. #26

    По умолчанию

    Цитата Сообщение от capzap Посмотреть сообщение
    http://ru.wikipedia.org/wiki/%D0%9F%...BE%D0%BA%D0%B8 не нашел про два нулевых байта для текстовых документов
    Capzap, в этом то и дело, в идеале в документе, который изначально создан как текстовый такой ситуации возникать не должно.
    Но если она вдруг возникнет....
    Или, например файл битый (запись не прошла корректно или питание в этот момент пропало). Поэтому в идеале конечно не помешало бы сделать проверку файла или читать данные блоками и искать в них нули.

  7. #27

    По умолчанию

    Цитата Сообщение от Мурат Ахриев Посмотреть сообщение
    Да, действительно, функциональному блоку чтения файла(FILE.Read) можно подать на вход указатель на массив байт.
    Далее проанализировав массив байт найти начало и конец нужной строки.
    Далее установить позицию чтения (FILE.Setpos), длину читаемой строки и повторно считать нужную строку (FILE.Read) в буфер типа String[255].
    Не совсем понятно преимущество.
    Например:
    var
    array_string: ARRAY[0..10] OF STRING;
    array1 [0..10] of byte;
    FileOpen : File.Open;
    FileRead : File.Read;
    end_var

    открываем файл
    FileOpen(.........);
    читаем файл
    FileRead(xExecute:= TRUE, hFile:= ........., pBuffer:= ADR(array_string[0]), szBuffer:=..........);
    В чем преимущество указывать на массив pBuffer:= ADR(array_string[0]), не пойму?

    Или реч идет об указании FileRead(xExecute:= TRUE, hFile:= ........., pBuffer:= ADR(array1), szBuffer:=..........);?
    А если реч идет о втором варианте, то массив при файле в десяток мегабайт должен быть наверно 0...1000000, его чтение и обработка займет продолжительное время.
    Последний раз редактировалось arlyn; 03.02.2014 в 08:15.

  8. #28

    По умолчанию

    var
    string_line: string[255];
    array1 [0..10] of byte;
    FileOpen : File.Open;
    FileRead: File.Read;
    Setpos :File.SetPos;
    end_var

    Для начала считываете в массив байтов

    FileRead(xExecute:= TRUE, hFile:= ........., pBuffer:= ADR(array1), szBuffer:=..........)

    Затем анализируете массив, ищите начало и конец нужной строки

    Далее

    Setpos(.........)

    Далее считываете уже нужную строку

    FileRead(xExecute:= TRUE, hFile:= ........., pBuffer:= ADR(string_line), szBuffer:=..........)

  9. #29

    По умолчанию

    Цитата Сообщение от Мурат Ахриев Посмотреть сообщение
    var
    string_line: string[255];
    array1 [0..10] of byte;
    FileOpen : File.Open;
    FileRead: File.Read;
    Setpos :File.SetPos;
    end_var

    Для начала считываете в массив байтов

    FileRead(xExecute:= TRUE, hFile:= ........., pBuffer:= ADR(array1), szBuffer:=..........)

    Затем анализируете массив, ищите начало и конец нужной строки

    Далее

    Setpos(.........)

    Далее считываете уже нужную строку

    FileRead(xExecute:= TRUE, hFile:= ........., pBuffer:= ADR(string_line), szBuffer:=..........)
    Да порядок действий понятен, Но вопрос в другом: Если обрабатываемый файл весит к примеру 10Мб то массив будет размером в array1[0..10485760] of byte . Это же сумасшедшие цифры, время обработки такого массива наверно тоже запредельное!
    Последний раз редактировалось arlyn; 03.02.2014 в 14:25.

  10. #30

    По умолчанию

    Цитата Сообщение от arlyn Посмотреть сообщение
    Да порядок действий понятен, Но вопрос в другом: Если обрабатываемый файл весит к примеру 10Мб то массив будет размером в array1[0..10485760] of byte . Это же сумасшедшие цифры, время обработки такого массива наверно тоже запредельное!
    Ну в том то и дело, что вам не надо читать всегда весь файл. Конечно, если файл небольшой его можно загрузить в ОЗУ (считать в массив) и дальше обрабатывать. Но если файл заранее не оговорен в размерах, то лучше читать его кусочками и далее ориентироваться по укзателю, где вы находитесь.

Страница 3 из 8 ПерваяПервая 12345 ... ПоследняяПоследняя

Похожие темы

  1. Архивирование данных
    от klg в разделе Master SCADA 3
    Ответов: 34
    Последнее сообщение: 27.10.2014, 17:22
  2. Архивирование журналов
    от Columbariy в разделе Master SCADA 3
    Ответов: 1
    Последнее сообщение: 14.09.2012, 18:49
  3. Архивирование на ПЛК
    от Руслан2 в разделе ПЛК1хх
    Ответов: 12
    Последнее сообщение: 07.05.2012, 14:33
  4. архивирование на Usb-флешке
    от Лёша в разделе ПЛК1хх
    Ответов: 8
    Последнее сообщение: 08.06.2009, 17:39

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •