Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays Fortran-如何将2dim数组的行提取为新的1dim数组_Arrays_Fortran_Row_Rank_Data Extraction - Fatal编程技术网

Arrays Fortran-如何将2dim数组的行提取为新的1dim数组

Arrays Fortran-如何将2dim数组的行提取为新的1dim数组,arrays,fortran,row,rank,data-extraction,Arrays,Fortran,Row,Rank,Data Extraction,我得到了以下ASCII字符的二维数组: 1st row: a(1,1)=A, a(1,2)=B, a(1,3)=C, a(1,4)=D, ... 2nd row: a(2,1)=a, a(2,2)=b, a(2,3)=c, a(2,4)=d, ... 3rd row: a(3,1)=!, a(3,2)=", a(3,3)=#, a(3,4)=$, ... ... 为了进一步处理,我想把它们打包 转换为一维数组元素,如下所示: b(1)<=a(1,:)=ABCD..., b(2)

我得到了以下ASCII字符的二维数组:

1st row: a(1,1)=A, a(1,2)=B, a(1,3)=C, a(1,4)=D, ...
2nd row: a(2,1)=a, a(2,2)=b, a(2,3)=c, a(2,4)=d, ...
3rd row: a(3,1)=!, a(3,2)=", a(3,3)=#, a(3,4)=$, ...
...
为了进一步处理,我想把它们打包 转换为一维数组元素,如下所示:

b(1)<=a(1,:)=ABCD...,
b(2)<=a(2,:)=abcd...,
b(3)<=a(3,:)=!"#$...,
...
b(j)
可能由一个空格(“,ASCII 32”)表示,提供 条件排除了它。)

我可以很容易地打印出字符串,如下所示

do j=1,n
  if (condition which excludes the 2nd row) then
     print *, a(j,:)
  end if
end do
输出为:

ABCD...
!"#$...
.......

但这不是我需要的。我需要的是进一步处理的
b(j)

你是说这样的吗

program bah
   implicit none
   character a(3,4)
   character(len=:), allocatable :: b(:)
   integer i, j
   a = reshape(['1','2','3','4','5','6','7','8','9','0','a','b'], [3,4])
   print '(4A2)', a(1,:)
   print '(4A2)', a(2,:)
   print '(4A2)', a(3,:)
   allocate(character(len=size(a(1,:))) :: b(size(a(:,1))))
   do i = 1, size(a(:,1))
      do j = 1, size(a(1,:))
         b(i)(j:j) = a(i,j)
      end do
   end do
   print *, trim(b(1))
   print *, trim(b(2))
   print *, trim(b(3))
end program bah

邮政编码,而不是类似的代码。向我们展示您的原始数组声明和目标数组声明,并清楚地解释如何将前者转换为后者。现在,想弄清楚你在问什么太难了。你想通过连接原始二维数组每一行的所有字符来创建一个新的一维数组吗?->Matt P。是的,这正是我想要的。这个页面能帮助你吗:
size(a(1,:)
这样的表达式也可以写成
size(a,2)
。高性能标记是正确的。我本应该给出完整的代码,但从我的程序中提取出来却很困难,因为我的程序有1000多行代码。问题是a(i,j)有其他值(上面的点),双do循环不适用于这些值。我希望得到的是a(:,j)->b(j),即以某种方式绕过“错误:赋值中不兼容的秩0和1”,即直接将整行a(:,j)映射到b(j)的列,而不是通过a(I,j)的显式“I”。Fortran中有没有什么技巧可以将2dim数组的整行视为1dim数组的元素?中给出的答案与此处给出的答案基本相同。它们都依赖于双do循环,这对给定的问题没有帮助,因为a(i,j)的元素正在被处理(连同行和列的大小),并且依赖于程序的其他变量。这些其他变量决定了a(i,j)的哪一行应该映射到b(j),但没有指定“i”,因此这些行应该被视为单个字符串,即我们应该有a(:,j)->b(j)。如果你想让任何人阅读你的广泛评论,请将材料编辑到你的问题中。您可能会说服某人它不是已识别的副本,并提示投票重新打开。但是试图破译注释太难了。@IanBush,我还想知道人们对嵌套do循环进行转换的厌恶。示例程序被用作教学工具(包括标记的do语句;-)。编写函数来执行
b(j)=smash(a(:,j))
应该很简单。这里需要有足够大的长度类型参数
b
,以处理
smash
返回的最大字符串,否则结果将在赋值时被截断。这将隐藏嵌套循环。
program bah
   implicit none
   character a(3,4)
   character(len=:), allocatable :: b(:)
   integer i, j
   a = reshape(['1','2','3','4','5','6','7','8','9','0','a','b'], [3,4])
   print '(4A2)', a(1,:)
   print '(4A2)', a(2,:)
   print '(4A2)', a(3,:)
   allocate(character(len=size(a(1,:))) :: b(size(a(:,1))))
   do i = 1, size(a(:,1))
      do j = 1, size(a(1,:))
         b(i)(j:j) = a(i,j)
      end do
   end do
   print *, trim(b(1))
   print *, trim(b(2))
   print *, trim(b(3))
end program bah