Вопрос по записи файла

 

Читаю файл csv, провожу манипуляции с данными и записываю их в другой csv файл.

Открываю записанный файл и вторая ячейка не видна и первая с датами впрочем тоже. Вот, как на картинке:

Но, если открыть файл в блокноте, то все есть. Прилагаю скрин:

Если дополняю третье значение для записи, то в открытом фале csv все корректно:

Qnt=FileWrite(HandleWrite,time[x][0],time[x][1],time[x][1]);

Прикрепляю считываемый файл в конце сообщения, нужно сделать расширение csv, сделал txt.

Не хотелось бы лишние данные записывать. Что посоветуете?

#property copyright "forexman77"
#property link      "forexman77"
#property version   "1.00"
#property strict
#property script_show_inputs
extern string File_Name="file.csv";
extern string File_NameW="test.csv";
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   int Handle,HandleWrite,Qnt, k=0,schet=0;
   string str, str1, str2, dop_time="00:00:00", Skip, year, month, day;

   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// открываем файл
   HandleWrite=FileOpen(File_NameW,FILE_READ|FILE_WRITE|FILE_CSV,",");
   ResetLastError();
   if(Handle<0) // файл для чтения
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_Name);
      else
         Alert("Error when opening a file ",File_Name);
      PlaySound("Bzrrr.wav");
      return;
     }
   ResetLastError();
   if(HandleWrite<0) // файл для записи
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_NameW);
      else
         Alert("Error when opening a file ",File_NameW);
      PlaySound("Bzrrr.wav");
      return;
     }
   schet=0;
   while(FileIsEnding(Handle)==false)
     {
      Skip=FileReadString(Handle);//пропускаем
      if(FileIsLineEnding(Handle))
         schet+=1;
      if(FileIsEnding(Handle))
         FileClose(Handle);  //получили кол-во строк, то есть размер массива time[][2]
     }
   Print("строк=",schet);
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");
   if(Handle<0) // Failure when opening a file
     {
      if(GetLastError()==4103)
         Alert("There is no file named ",File_Name);
      else
         Alert("Error when opening a file ",File_Name);
      PlaySound("Bzrrr.wav");
      return;
     }
   string time[][2];
   ArrayResize(time,schet);
   while(FileIsEnding(Handle)==false)
     {
      Skip =FileReadString(Handle);// строка даты
      str=StringSubstr(Skip,0,10);
      year=StringSubstr(Skip,6,4);
      month=StringSubstr(Skip,3,2); 
      day=StringSubstr(Skip,0,2); ;
      
      str1 =year+"."+month+"."+day+" "+dop_time;
      
      str2 =FileReadString(Handle);
      StringReplace(str2,",",".");

      time[k][0]=str1;
      time[k][1]=str2;
      k+=1;
     }
   FileClose(Handle);
   for(int x=schet-1; x>=0; x--)
     {
      Qnt=FileWrite(HandleWrite,time[x][0],time[x][1]);//запись файла
      if(Qnt<0)
         Alert("не получилась запись=");
     }

   FileClose(HandleWrite);
  }
//+------------------------------------------------------------------+
Файлы:
file.txt  8 kb
 
forexman77:

Но, если открыть файл в блокноте, то все есть. Прилагаю скрин:

с Экселем научитесь работать, формат ячеек настройте

 

У вас разделитель - запятая? точка с запятой?

   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// открываем файл
   HandleWrite=FileOpen(File_NameW,FILE_READ|FILE_WRITE|FILE_CSV,",");

Почему разные?

 

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

FileWrite(HandleWrite, time[x][0]);
FileWrite(HandleWrite, time[x][1]);//запись файла
 
Igor Zakharov:

У вас разделитель - запятая? точка с запятой?

Почему разные?

Так нужно. Данные считываемого файла не мои, а записываемого мне нужно именно разделитель запятая.

 
Alexey Viktorov:

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

Попробовал так(вторая картинка блокнот):

for(int x=schet-1; x>=0; x--)
     {
      FileWrite(HandleWrite, time[x][0]);
      FileWrite(HandleWrite, time[x][1]);//запись файла
     }

 
Igor Makanu:

с Экселем научитесь работать, формат ячеек настройте

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

 
Еще дополнение: даты должны быть год-месяц-день.
 
forexman77:

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

тогда не знаю, просто на Ваш вопрос раз 50 уже отвечал разным людям по скайпу - очень распространено, что в Экселе данные не корректно отображаются у клиентов, а проблема в автоформате ячеек , но как Вы писали выше в блокноте все корректно

 
Igor Makanu:

тогда не знаю, просто на Ваш вопрос раз 50 уже отвечал разным людям по скайпу - очень распространено, что в Экселе данные не корректно отображаются у клиентов, а проблема в автоформате ячеек 

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

Вопрос закрыт, проблема была в excel.

 
forexman77:

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

Вопрос закрыт, проблема была в excel.

не совсем так - точка или запятая определяется региональными настройками в Виндовс, что то про разделитель

ну если работает, ну и отлично!

Причина обращения: