gpt4 book ai didi

file-io - 逐行读取文本文件,但仅读取特定列

转载 作者:行者123 更新时间:2023-12-04 15:34:16 24 4
gpt4 key购买 nike

我们如何在跳过其中的某些列的同时逐行读取特定文件?

例如,我有一个包含数据的文本文件,分为 5 列,但我只需要从中读取两列,它们可以是前两列或任何其他随机组合(我的意思是,需要一个可行的解决方案与列的任何组合,如第一和第三列)。

代码是这样的

        open(1, file=data_file)
read (1,*) ! to skip first line, with metadata
lmax = 0
do while (.true.)
! read column 1 and 3 here, either write
! that to an array or just loop through each row
end do
99 continue
close (1)

任何解释或示例都会有很大帮助。

最佳答案

High Performance Mark's answer给出了简单的选择性列读取的要点:仍然读取该列,但将其转移到一个随后被忽略的变量中。

为了扩展该答案,请考虑我们要读取五列行的第二列和第四列:

read(*,*) junk, x, junk, y

第一个值被转移到 junk ,然后第二个变成 x ,然后第三个(替换刚刚获得的那个)到 junk最后第四个进入 y .第五个被忽略,因为我们已经用完了输入项并且传输语句终止(循环中的下一次读取将转到下一条记录)。

当然,当我们知道这是我们想要的那些列时,这很好。当我们事先不知道时,让我们概括一下:
integer col1, col2   ! The columns we require, defined somehow (assume col1<col2)
<type>, dimension(nrows) :: x, y, junk(3) ! For the number of rows
integer i

do i=1,nrows
read(*,*) junk(:col1-1), x(i), junk(:col2-col1-1), y(i)
end do

在这里,我们将多个值(可能为零)转移到感兴趣的第一列之前,然后是感兴趣的值。之后,更多要忽略的值(可能为零),然后是感兴趣的最终值。跳过该行的其余部分。

这仍然是非常基本的,并且避免了许多潜在的需求复杂性。在某种程度上,这是一种基本的方法,人们不妨考虑一下:
do i=1,nrows
read(*,*) allofthem(:5)
x(i) = allofthem(col1)
y(i) = allofthem(col2)
end do

(该变量是逐行临时的)但多样性和选项都很好。

关于file-io - 逐行读取文本文件,但仅读取特定列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22452536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com