2011-06-24 25 views
6

'da virgülle ayrılmış metin dosyası satırlarını okuyarak bir Fortran acentasıyım. Bir metin dosyasını okuyabilmek ve içeriğini bireysel değişkenlere kaydedebilmek istiyorum. Çok yararlı bir Fortran öğreticisi (http://www.math.hawaii.edu/~hile/fortran/fort7.htm#read) buldum ve orada listelenen örneklerden birini takip etmeye çalışıyorum. Benim şimdiki dizinde Bu metin dosyasını kaydetmişFortran

1.23, 4.56, 7.89 
11, 13, "Sally" 

: Özellikle, adlı bir metin dosyası aşağıdaki metinle data.txt yaptı. Sonra, bir dosyası oluşturduk test.f90 içeren aşağıdaki kodu (aynı zamanda benim geçerli dizinde kaydederek):

PROGRAM test 
    IMPLICIT NONE 

    REAL :: x, y, z 
    INTEGER :: m, n 
    CHARACTER first*20 

    OPEN(UNIT = 7, FILE = "data.txt") 
    READ(7,*) x, y, z 
    READ(7,*) m, n, first 

    PRINT *, x 
    PRINT *, y 
    PRINT *, z 
    PRINT *, m 
    PRINT *, n 
    PRINT *, first 
END PROGRAM test 

Ben gelene kadar en azından özellikleri içerir düşünüyorum GNU Fortran derleyicisi, kullanıyorum Fortran95 dahil ve dahil. Yukarıdaki kod, en azından varsayılan ayarlarla tamam derlenmiş gibi görünüyor). Ben Oluşan yürütülebilir çalıştırdığınızda Ama bu hata mesajını alıyorum:

At line 10 of file test.f90 (unit = 7, file = 'data.txt') 
Fortran runtime error: End of file 

Hat 10 hat OKU (7, *) m, n, ilk. Yukarıdaki kodda yanlış yaptığımı görmeme yardım edebilir misiniz?

+0

Başka bir birim numarasıyla deneyin (> 10). Belki de derleyiciniz önceden bağlı bir cihaz için birim 7 kullanır. – eriktous

+0

@eriktous: Zaman ayırdığınız için çok teşekkür ederim, ancak maalesef bu sorunu çözmüyor (en azından 15 birim kullandığımda). Yine de tavsiye için teşekkür ederim; Önceden ayarlanmış cihazlar için derleyici tarafından 10 veya daha az birimin kullanılabileceğini bilmek gerçekten çok güzel. Bunu aklımda tutacağım. Teşekkürler! – Andrew

cevap

2

Tam olarak hata iletinizi ve doğru çıktıyı çoğaltabilirim. Windows'da gfortran ve veri dosyasını oluşturmak için Notepad kullanıyorum.
İkinci veri hattını satır sonu karakteri ile sonlandırırsanız (Enter tuşuna basarak), program doğru çıktıyı gösterir; Sonlandırmazsanız, yürütme sırasında hata gösterecektir.

Temel olarak, çalışma zamanı bir satır okumayı dener, ancak satır sonuna ulaşmadan önce bir dosya sonu karakteri ile karşılaşır.

3

Örnek programınız olduğunda, örnek verilerinizle çalıştı! Tebrik ederiz! Çıktı oldu:

1.2300000  
    4.5599999  
    7.8899999  
      11 
      13 
Sally 

o OS için doğru hat-terminatör talebiyle bazen Fortran yürütülebilir Satır sonlarına duyarlı olabilir, sizin için çalışan son satırında dahil olmadığı olası nedenini tahmin etmek bir veri dosyası. Tersine birçok editör, hat sonlarını sessiz bir şekilde dönüştürecek. Microsoft programlarının yazdığı dosyalarla bu soruna sıklıkla rastlarım.

+0

Aslında metin dosyamı Microsoft editörüyle yaptım: Windows XP'de Not Defteri. Sadece şimdi aynı metni içeren yeni bir metin dosyası yaptım, ancak bu kez XEmacs kullanılarak yazılmış ve 7 veya 15 yerine 16 birim değeri kullanıldı. Ne yazık ki, hala çalışmayacak. Sadece meraktan, hangi metin editörünü tavsiye edersiniz? Ayrıca, belki de bazı Fortran lehçelerinin bir “sonlandırıcı karakteri” olması olabilir mi? Örneğin, C'deki her metin dosyasının bir "\ 0" veya bir boş gösterici ile bitmesi gerektiğini biliyorum. – Andrew

+0

XEmacs hakkında da kendine has bir şey var. Bunun yerine vi'yi kullanarak metin dosyasını oluşturduğumda, işe yarıyor ve yaptığınız gibi aynı çıktıyı elde ediyorum.GNU Fortran derleyicisini (gfortran) kullanıyorum; sen de mi kullanıyorsun? – Andrew

+1

Mac OS X ile gfortran kullanıyorum. Editörden bağımsız olarak, işletim sistemi işletim sisteminin satır sonlandırıcısını satırın sonundaki son satır da dahil olmak üzere bekliyor. @eriktous'un yazdığı gibi, bir satır sonlandırıcı almak için Enter'u kullandığınızdan emin olun. Microsoft programları sık sık, açık olmayan sorunlara neden olan yanlış sonlandırıcıyı kullanır. –

2

Bazı derleyiciler için, veri ile son satırdan sonra yeni bir satır eklemek önemlidir. Örneğin gfortran, buna ihtiyacı olan bir derleyicidir ve oldukça mantıklıdır. Sun (Oracle) derleyicisinin buna ihtiyacı yok.

+0

Temel olarak söylediklerimin aynısı değil mi? – eriktous

+0

Evet, öyle. Hızlı bir okumadan sonra fark etmedim. Genelde farklı editörler hakkında biraz yanlış tartışmayı okudum. –

İlgili konular