Работа с файлами. Разделение текстового файла. - страница 2

 
Nauris Zukas:

Я понемножку продвигаюсь и уже научился находить "разделитель колонок табуляция (0x09)".


Но меня заинтересовал вопрос, как глядя на текст можно било найти и узнать эти кода LF (0x0A)  и (0x09) которых я сейчас использую?

Какой файл-менеджер Вы используете? Во многих есть встроенный просмотрщик файлов, в котором можно переключиться в hex-режим, а кроме того поменять настройки перевода строк в тексте и отображения табуляций (в частности можно невидимые символы разделители особым образом подсвечивать - тогда структура файла сразу становится ясна).

 
Alexey Viktorov:

Самое простое, открыть файл с помощью Excell и он будет выглядеть так

Затем сохранить его как .csv и потом его читать.

Спасибо, буду иметь в виду! С маленькими файлами такой вариант подходит, но если файл 7GB, то это не подойдёт.

 
Stanislav Korotky:

Какой файл-менеджер Вы используете? Во многих есть встроенный просмотрщик файлов, в котором можно переключиться в hex-режим, а кроме того поменять настройки перевода строк в тексте и отображения табуляций (в частности можно невидимые символы разделители особым образом подсвечивать - тогда структура файла сразу становится ясна).

Я открывал в Notepad. Вчера скачал HxD hex-редактор но пока с ним не разобрался.


 
Nauris Zukas:

Я открывал в Notepad. Вчера скачал HxD hex-редактор но пока с ним не разобрался.


Правая колонка - текстовый файл в том виде, в котором мы его видим. Поле с числами посередине - шестнадцатеричные коды, которыми представлены символы из текстового файла. Так, вторая строка этого поля начинается числами 41, 73, 6B и 0A. В десятичной системе счисления это 65, 115, 107 и 10 соответственно. Первые 3 числа - это коды символов "A", "s" и "k". Четвертый символ - это признак конца строки, который можно использовать как разделитель. Второй символ-разделитель, если таким же образом просмотреть файл далее, это символ, представленный кодом 09.
 
Ihor Herasko:
Правая колонка - текстовый файл в том виде, в котором мы его видим. Поле с числами посередине - шестнадцатеричные коды, которыми представлены символы из текстового файла. Так, вторая строка этого поля начинается числами 41, 73, 6B и 0A. В десятичной системе счисления это 65, 115, 107 и 10 соответственно. Первые 3 числа - это коды символов "A", "s" и "k". Четвертый символ - это признак конца строки, который можно использовать как разделитель. Второй символ-разделитель, если таким же образом просмотреть файл далее, это символ, представленный кодом 09.

Спасибо!

 

Вот ещё такой вопрос появился, я сейчас читаю файлы с ssd диска но хотел бы сравнить время чтение файла ели он будет на hdd диске. Как-бы лучше это сделать? Просто  ssd быстро заполнится большими файлами.

P.S. Оказывается что не можно будет читать файлы с hdd.
"Из соображений безопасности в языке MQL4 строго контролируется работа с файлами. Файлы, с которыми проводятся файловые операции средствами языка MQL4, не могут находиться за пределами файловой "песочницы"."
 
Nauris Zukas:

Здравствуйте!

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

О разделителях Вам подробно ответили. Меня удивил размер файла.

До 7 гигабайт... и в свой массив. Надо ли такой массив держать в памяти? Вообще, если такие объемы данных, то обрабатывать их лучше всего своими программами. Не офисными средствами и даже не распространенными файл-менеджерами.

Например, построчно читать, преобразовывать в элемент массива и переписывать в другой файл, бинарный, с размером записи = длине элемента в памяти. Он уже будет меньше за счет более компактного представления даты, времени, курса, отсутствия разделителей. Кроме того, его можно читать не с начала, а поднимать в память только идущие подряд нужные элементы сразу, вычисляя смещение в файле по номеру элемента.

Как я понял, это тики одного инструмента. Мне представляется лучшим вариантом разбить все данные на куски по одному часу или по суткам. Когда будете преобразовывать длинный файл в такие куски, заодно выяснится, верно ли он упорядочен, есть ли пропуски. А также шпильки.

 
New version 1.1 of the product TSO Stochastic RSI: New version 1.1 of the product TSO Stochastic RSI is available
 
Vladimir:

О разделителях Вам подробно ответили. Меня удивил размер файла.

До 7 гигабайт... и в свой массив. Надо ли такой массив держать в памяти? Вообще, если такие объемы данных, то обрабатывать их лучше всего своими программами. Не офисными средствами и даже не распространенными файл-менеджерами.

Например, построчно читать, преобразовывать в элемент массива и переписывать в другой файл, бинарный, с размером записи = длине элемента в памяти. Он уже будет меньше за счет более компактного представления даты, времени, курса, отсутствия разделителей. Кроме того, его можно читать не с начала, а поднимать в память только идущие подряд нужные элементы сразу, вычисляя смещение в файле по номеру элемента.

Как я понял, это тики одного инструмента. Мне представляется лучшим вариантом разбить все данные на куски по одному часу или по суткам. Когда будете преобразовывать длинный файл в такие куски, заодно выяснится, верно ли он упорядочен, есть ли пропуски. А также шпильки.


Еще большие массивы можно архивировать, где-то была статья на эту тему.
И хранитиь в памяти (и на диске) зип-архив.

 
Vladimir:

О разделителях Вам подробно ответили. Меня удивил размер файла.

До 7 гигабайт... и в свой массив. Надо ли такой массив держать в памяти? Вообще, если такие объемы данных, то обрабатывать их лучше всего своими программами. Не офисными средствами и даже не распространенными файл-менеджерами.

Например, построчно читать, преобразовывать в элемент массива и переписывать в другой файл, бинарный, с размером записи = длине элемента в памяти. Он уже будет меньше за счет более компактного представления даты, времени, курса, отсутствия разделителей. Кроме того, его можно читать не с начала, а поднимать в память только идущие подряд нужные элементы сразу, вычисляя смещение в файле по номеру элемента.

Как я понял, это тики одного инструмента. Мне представляется лучшим вариантом разбить все данные на куски по одному часу или по суткам. Когда будете преобразовывать длинный файл в такие куски, заодно выяснится, верно ли он упорядочен, есть ли пропуски. А также шпильки.

Где-то пропал мой комментарий... Я заметил ошибку когда начал заполнять массивы, но я это проблему решил, например, каждую 1000 строку проверял на нужное время если находил то, дальше уже заполнял массив, например, на 2000. С таким объемом уже можно нормально работать.