Как записать файл на диск, если длина строки больше 63? - страница 2

 
Integer:

Есть такие функции в mql4:

int FileWriteArray( int handle, object array[], int start, int count)

int FileReadArray( int handle, object&array[], int start, int count)

Будет полезно прочитать про них в справке. Или хотя бы, если в csv писать, то в циклах по одному элементу. Например первые две строчки файла будут хранить размеры массива, а дальше данные.

Функции FileWriteArray и FileReadArray работают с двоичными файлами, а мне нужно csv (к стати, справку я периодически читаю, особенно когда сталкиваюсь с проблемой, только решения ее я там не нахожу). Я пишу csv - файл в цикле по строке, но FileWrite не может писать строку более 63 символов, а объединить две строки с помощью функции FileSeek(handle, 0, SEEK_CUR) мне не удается.
А в случае "первые две строчки файла будут хранить размеры массива, а дальше данные. " - у меня нет возможности дальше преобразовать массив, а в таком формате я с ним не смогу работать.
 
Piligrimm:
bstone:

А если в цикле собрать все элементы одной строки файла в один string через запятую, а потом записать ее в файл? И так для каждой строки...


Я не совсем представляю, как это сделать, покажите, пожалуйста, на примере. На сколько я помню, длина строки тоже не может превышать 64 значения.

Вынужден обрадовать вас - вы ошибаетесь насчет максимальной длины строк. Согласно документации, строковые константы ограничены 255 символами. Строковые переменные ограничены 2^32-1 символами и объемом доступной памяти.

Попробуйте такой код вместо вашего:

string row = "";
 
// Собираем элементы строки
for( int i = 0; i < 51; i++ ) row = row + MS[ i ] + ",";
for( i = 0; i < 51; i++ ) row = row + MS5[ i ] + ",";
 
// Откусываем лишнюю запятую
row = StringSubstr( row, 0, StringLen( row ) - 1 );
 
// Записываем строку в файл
FileWrite( handle, row );
 
bstone:
Piligrimm:
bstone:

А если в цикле собрать все элементы одной строки файла в один string через запятую, а потом записать ее в файл? И так для каждой строки...


Я не совсем представляю, как это сделать, покажите, пожалуйста, на примере. На сколько я помню, длина строки тоже не может превышать 64 значения.

Вынужден обрадовать вас - вы ошибаетесь насчет максимальной длины строк. Согласно документации, строковые константы ограничены 255 символами. Строковые переменные ограничены 2^32-1 символами и объемом доступной памяти.

Попробуйте такой код вместо вашего:

string row = "";
 
// Собираем элементы строки
for( int i = 0; i < 51; i++ ) row = row + MS[ i ] + ",";
for( i = 0; i < 51; i++ ) row = row + MS5[ i ] + ",";
 
// Откусываем лишнюю запятую
row = StringSubstr( row, 0, StringLen( row ) - 1 );
 
// Записываем строку в файл
FileWrite( handle, row );



Большое спасибо, получилось.
Причина обращения: