CAPL写入文本文件

问题描述 投票:2回答:2

我是CAPL语言的新手。因此,我在将数据写入.txt文件时遇到问题。这是我写的代码:

    includes
{

}

variables
{
  message Generate_Num Gen;
  message Logger Logs;
  msTimer tim_100ms;
  msTimer tim_500ms;
  int time_over; // 500 ms flag.
  dword handle=0;
  float val=0;
  long index=0;
  int val_arr[512];
}

on start 
{
  time_over=0; 
  setWritePath("C:\\Users\\Türker\\Desktop\\soft_pro");
  handle= openFileWrite("Log.txt",1);
  Gen.Num_Data=1;
}

on envVar Logger_Sw
{   

    if(@this)
    {
      setTimer(tim_500ms,500);
      setTimer(tim_100ms,100);
    }
    else
    {
      cancelTimer(tim_500ms);
      cancelTimer(tim_100ms);
    }

}

on envVar Save_txt
{   
  if(@Save_txt==1)
    {
      int i;
      float val_n;
      for(i=0;i<elcount(val_arr);i++)
      {
        val_n=val_arr[i];
        writeProfileFloat("1","1",val_n,"Log.txt");
      }
    } 
}

on timer tim_100ms
{
  output(Gen);
  Gen.Num_Data++; 
  setTimer(tim_100ms,100);
}

on message Generate_Num
{
  if(time_over==1)
  {
   val=this.Num_Data;
   val_arr[index]=val; 
   Logs.Logged_Val=val;
   output(Logs);
   index++; 
   time_over=0;
  }

}

on timer tim_500ms
{
  time_over=1;
  setTimer(tim_500ms,500);
} 

我将采样数据存储在“val_arr”数组中。我希望将其写入文本文件中。但是,它总是覆盖写入的数据。 “Save_txt”环境变量执行写入作业。

干杯。

vector capl canoe
2个回答
1
投票

以其他访问模式打开文件。

OpenFileWrite ("Log.txt",2);

如果mode = 0,则可以ASCII模式执行写入; 如果mode = 1,则可以在二进制模式下执行写入。将覆盖现有文件。 mode = 2在ASCII模式的文件末尾附加数据。 mode = 3将数据附加到文件末尾以用于二进制模式。


1
投票

这是一个简单的例子,当变量增加时写入变量的值。

variables 
{
  dword logFile;        // logfile handle
  int i;                
  char results[1024];   // store our formatted string
}

on start 
{
  setFilePath("C:\\Demo\\Results", 2);       // 2 = read & write
  logFile = openFileWrite("Results.txt", 2); // 2 = append file

  for (i = 0; i < 10; i++ ) 
  {
    snprintf(results, 1024, "The value of 'i' is %d\n", i);
    filePutString(results, 1024, logFile);       
  }
  fileClose(logFile);  
}
© www.soinside.com 2019 - 2024. All rights reserved.