我目前正在处理一个文件,逐个打开.txt文档,提取数据,最后填充.excel文档。
因为我不知道在一个写入语句之后如何在我的Excel文档的同一行上多次写入(因为它跳转到下一行),我创建了一个字符串,这些字符在之后填充时间:
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
值相匹配,因此我构建了一个变量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',但在我的格式写入语句结束时添加'$'会禁用我的函数返回。通过将其移动到我的循环,我想我可以解决我的问题:)。我正在尝试添加它
答案 0 :(得分:0)
首先,你的行
ecriture_descr = ecriture_descr//new_data1
几乎肯定没有做你期望它做的事情。我假设ecriture_descr
和new_data
都是CHARACTER(len=<some value>)
类型 - 这是一个固定长度的字符串。如果为这样的字符串分配任何内容,则字符串将被剪切为长度(如果分配的时间太长),或填充空格(如果分配的字符太短:
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
的范围,有点像这样:
h = "Hello" ! h is actually "Hello "
h = h // "World" ! equiv to h = "Hello " // "World"
! = "Hello World"
! ^^^^^^^^^
! Only this is assigned to h => no change
如果你想要一个字符串聚合器,你需要使用删除所有尾随空格的trim
函数:
h = trim(h) // " World"
其次,如果要写入文件但不想使用换行符,可以将选项advance='no'
添加到write语句中:
do i = 1, 100
write(*, '(I4)', advance='no') i
end do
这应该让你的工作比在内存中创建一个非常长的字符串更容易,然后一次性写出来。