写一个复杂的格式/可能性不止一次写在同一个excel行的语句

我目前正在一个文件上打开一个个.txt文件,提取数据,最后填入一个.excel文件。

因为我不知道如何在一个写入语句(因为它跳到下一行)之后在我的Excel文档的同一行上多次写入,所以我创build了一个string,这个string一次又一次被填充:

Data (data_limite(x),x=1,8)/10, 9, 10, 7, 9, 8, 8, 9/ do file_descr = 1,nombre_fichier,1 taille_data1 = data_limite(file_descr) nvari = taille_data1-7 write (new_data1,"(A30,A3,A11,A3,F5.1,A3,A7,F4.1,<nvari>(A3))") description,char(9),'T-isotherme',char(9),T_trait,char(9),'d_gamma',taille_Gam,(char(9),i=1,nvari) ecriture_descr = ecriture_descr//new_data1 end do 

主要问题是我想调整char(9)数量与data_limite值,所以我build立了一个可变数量的char(9)的写入语句。

在do循环结束时,我有一个非常复杂的ecriture_descr格式,由于nvari值的变化,它没有周期性的格式

现在我想添加到我的.excel的第一行:

  Open(Unit= 20 ,File='resultats.RES',status='replace') write(20,100) 'param',char(9),char(9),char(9),char(9),char(9),'*',char(9),'nuances',char(9),'*',char(9),ecriture_descr 100 format (a5,5(a3),a,a3,a7,a,a3,???) 

但我不知道如何写这个格式。 如果在do循环的每次迭代中我都可以填充我的excel的第一行,并继续在每个新的new_data1值处填充第一行,那将会更容易一些。

编辑:也许在我的写声明中添加advance ='no'会帮助我,我正在尝试添加它

编辑2:它没有与advance ='no'一起工作,但在我的格式写入语句的末尾添加'$'禁用我的函数返回。 通过将其移动到我的循环,我想我可以解决我的问题:)。 我正在尝试添加它

首先,你的路线

 ecriture_descr = ecriture_descr//new_data1 

几乎肯定不会做你期望的事情。 我假设ecriture_descrnew_data的types都是CHARACTER(len=<some value>) – 这是一个固定长度的string。 如果您为此类string分配了任何内容,则会将string剪切为长度(如果分配太长)或填充空格(如果分配太短:

 program strings implicit none character(len=8) :: h h = "Hello" print *, "|" // h // "|" ! Prints "|Hello |" h = "Hello World" print *, "|" // h // "|" ! Prints "|Hello Wo|" end program strings 

这个组合对你不利: ecriture_descr已经用空格填充到最大值,所以当你添加new_data1它会在ecriture_descr的范围ecriture_descr ,有点像这样:

 h = "Hello" ! h is actually "Hello " h = h // "World" ! equiv to h = "Hello " // "World" ! = "Hello World" ! ^^^^^^^^^ ! Only this is assigned to h => no change 

如果你想要一个string聚合器,你需要使用trim函数删除所有的尾部空格:

 h = trim(h) // " World" 

其次,如果你想写一个文件,但不想有一个换行符,你可以在写入语句中添加advance='no'选项:

 do i = 1, 100 write(*, '(I4)', advance='no') i end do 

这应该使你的工作比在内存中创build一个非常长的string更容易,然后一口气写出来。