写一个复杂格式的语句/在同一个excel行上多次写入的可能性

时间:2016-08-11 11:30:14

标签: excel fortran

我目前正在处理一个文件,逐个打开.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',但在我的格式写入语句结束时添加'$'会禁用我的函数返回。通过将其移动到我的循环,我想我可以解决我的问题:)。我正在尝试添加它

1 个答案:

答案 0 :(得分:0)

首先,你的行

ecriture_descr = ecriture_descr//new_data1

几乎肯定没有做你期望它做的事情。我假设ecriture_descrnew_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

这应该让你的工作比在内存中创建一个非常长的字符串更容易,然后一次性写出来。