Bir Fortran programında belleğe bir dosya okumaya çalışıyorum. Dosya, her satırda iki değere sahip N
satır içerir. Bu şu anda (bu derlenmiş ve çalışan, ancak bana yanlış çıkış verir) ne olduğunu:Fortran dosyaya dizgi okuma - dönüştürülmüş boyutlar
cs
içine yüklendi olsun ümit Ne
program readfromfile
implicit none
integer :: N, i, lines_in_file
real*8, allocatable :: cs(:,:)
N = lines_in_file('datafile.txt') ! a function I wrote, which works correctly
allocate(cs(N,2))
open(15, 'datafile.txt', status='old')
read(15,*) cs
do i=1,N
print *, cs(i,1), cs(i,2)
enddo
end
, Ancak yukarıdaki kod çalıştığında, önce iki "sol sütun" değeri olan bir satır, daha sonra iki "sağ sütun" değeri olan bir satır, ardından sonraki iki "sol sütun değeri" olan bir çizgi basar ve böyle devam eder. İşte
durumun daha görsel açıklaması aşağıda verilmiştir: Bencs
tahsis ederken endeks anahtarlama denedim
In my data file: Desired output: Actual output:
A1 B1 A1 B1 A1 A2
A2 B2 A2 B2 B1 B2
A3 B3 A3 B3 A3 A4
A4 B4 A4 B4 B3 B4
ancak aynı sonuçları (veya segfault ile Hava bağlı Ayrıca baskı at indeksleri geçiş Beyan). Ayrıca, satır-satır-değerlerini okumayı denedim, ancak veri dosyasının düzensiz formatı nedeniyle (virgülle ayrılmış, sütun-hizalanmış değil), bunu hiç işe yaramadı.
Verileri, istediğim sonucu elde etmenin en iyi yolunu nasıl bellekte okuyabilirim?
Bu işe daha önce neden ulaşamadığımı çok şaşırdım, ama şimdi öyle. Teşekkürler! Giriş dosyamdaki virgüllerle ilgili olarak, bunlar gerçek dosyada var, ancak örnekte sadece elemanların sıralamasını görselleştirmek istedim. –
Ve çalışmadığında ne yaptığını açıklayan açıklama için bir not. Size daha fazla yetkili efendim! =) –
Bu yazının gelecekteki okuyucuları için: Okumak için sadece dosya adını ve satır ve cols sayısını okuyan ve aşağıdaki örtük yapıyla sona eren bir altprogramı genelleştirmek istedim: 'read (f, *) ((cs (satır, sütun), col = 1, Ncols), satır = 1, Burun). Yukarıdaki yanıtta @Vladimir F tarafından belirtilen nedenlerden dolayı sütunların iç döngüde olması gerektiğini unutmayın. –