CHRIS_MALL Δημοσ. 14 Δεκεμβρίου 2005 Δημοσ. 14 Δεκεμβρίου 2005 ALLOCATE(A(1:100,1:100)) OPEN (UNIT=1,FILE="C:\fortran\Data2.dat",STATUS="OLD") status=0; LOOP2: DO WHILE(STATUS/=-1) READ(1,*,IOSTAT=STATUS),A END DO LOOP2 Afto pou ginete omws einai na mpainou oi times tou arxeiou stis theseis A(1,1) , A(1,2) , A(1,3) , A(1,4) .... A(1,n) enw egw thelw na topothetountai oi times stin swsti grammi kai stili pou anoikoun opws sto arxeio.. Mporei na voithisei kaneis? Gnwrizei mipws kaneis an yparxei synartisi antistoixei tou end of line?
Diomedes Δημοσ. 17 Δεκεμβρίου 2005 Δημοσ. 17 Δεκεμβρίου 2005 Δεν θέλω να φανώ προσβλητικός όμως γιατί ρε φίλε ασχολείσαι ακόμα με Φόρτραν; Αν μάθαινες αρχαία Αιγυπτιακά θα σου ήταν πιό χρήσιμη σαν γλώσσα!
CHRIS_MALL Δημοσ. 18 Δεκεμβρίου 2005 Μέλος Δημοσ. 18 Δεκεμβρίου 2005 Δεν θέλω να φανώ προσβλητικός όμως γιατί ρε φίλε ασχολείσαι ακόμα με Φόρτραν; Αν μάθαινες αρχαία Αιγυπτιακά θα σου ήταν πιό χρήσιμη σαν γλώσσα! Symfwnw apolyta file mou ... alla ergasies sto panepisthmio einai aftes...ti na kaneis? :???: Pantws an mporei kaneis na mou pei an yparxei end-of-line entolh i' mia getline opws yparxoun stis alles glwsses as enhmerwsei!
vsav Δημοσ. 18 Δεκεμβρίου 2005 Δημοσ. 18 Δεκεμβρίου 2005 Gnwrizei mipws kaneis an yparxei synartisi antistoixei tou end of line? Gia EOF h Fortran xrhsimopoiei thn parametro END = label' date=' sthn entolh Read. Gia paradeigma: READ(1,*,End=300),A Auto shmainei oti otan to to arxeio ftasei sto telos tote to programma vgainei apo to Loop kai kanei jump sto label 300.
CHRIS_MALL Δημοσ. 21 Δεκεμβρίου 2005 Μέλος Δημοσ. 21 Δεκεμβρίου 2005 Gia EOF h Fortran xrhsimopoiei thn parametro END = label' date=' sthn entolh Read. Gia paradeigma: READ(1,*,End=300),A Auto shmainei oti otan to to arxeio ftasei sto telos tote to programma vgainei apo to Loop kai kanei jump sto label 300. File rwtisa gia end-of-line oxi end-of-file kai an gnwrizei kaneis kamia synartisi get line prokeimenou na diavasw enan pinaka pou den gnwrizw tis diastaseis tou apo arxeio. Efxaristw pantws
cronos Δημοσ. 21 Δεκεμβρίου 2005 Δημοσ. 21 Δεκεμβρίου 2005 File rwtisa gia end-of-line oxi end-of-file kai an gnwrizei kaneis kamia synartisi get line prokeimenou na diavasw enan pinaka pou den gnwrizw tis diastaseis tou apo arxeio.Efxaristw pantws Κοίτα να δείς. Υπάρχουν διάφοροι τρόποι να διαβάσεις ένα αρχείο στο οποίο δε γνωρίζεις τις διαστάσεις του. Αρκεί βέβαια να ξέρεις από πόσες στήλες αποτελείται το αρχείο σου (5-10 στοιχεία ανά γραμμή). Τρόπος 1: Ανοίγεις το αρχείο από την Visual Fortran και βλέπεις όλα τα data. Πας κάτω - κάτω και χτυπάς με το ποντίκη την τελευταία γραμμή. Στο κάτω δεξί μέρος της μπάρας σου λέει Ln (line) πχ 200' date=' Col (column) πχ 80. Έτσι έχεις από πόσες γραμμές αποτελείται το αρχείο σου. Όταν θα πας να το φορτώσεις θα ορίσεις τον πίνακα με τις γραμμές που βρήκες με αυτό το τρόπο. Τρόπος 2: (ελαφρώς πιο μπακαλίστικος) Αν έχεις μια εκτίμηση του πόσες γραμμές έχει το αρχείο σου πχ περίπου 1000 γραμμές από data, αλλά όχι ακριβώς 1000, ορίζεις τον πίνακα να έχει 3000 γραμμές. Κάνεις ένα do - loop στο οποίο θα διαβάζει τις 3000 γραμμές, λέγοντας του στην οθόνη να σου γράφει τον αύξοντα αριθμό της γραμμής. Κάποια στιγμή θα κολλήσει γιατί δε θα έχει άλλα στοιχεία να διαβάσει. Εκεί που κόλλησε, βρήκες και από πόσες γραμμές αποτελείται το αρχείο με τα data. Τρόπος 3: (μέσω του mathematica αν έχεις ακουστά). Του λές να διαβάσει το αρχείο με την ακόλουθη εντολή >[b] a = Partition[Flatten[ReadList["c:\\temp\\data\\file.dat", Number, RecordLists ->True]], 3]; Length[a] [/b] Όπου του λές σε ποιό directory είναι το αρχείο σου, (πχ. C:\\temp\\data\\ προσοχή δύο κάθετες γραμμές), το όνομα το αρχείου (πχ file.dat) και τέλος από πόσες στήλες αποτελείται το αρχείο σου (πχ. 3). Αυτόματα το Length[a'] θα σου πεί πόσες είναι οι γραμμές. Ελπίζω να κατάλαβα τί ακριβώς ζήταγες και να βοήθησα. Αυτά. 8)
bird Δημοσ. 21 Δεκεμβρίου 2005 Δημοσ. 21 Δεκεμβρίου 2005 O parakatw kwdikas souleyei se fortran77 opote ypo8etw 8a douleyei kai sthn 90. > open(unit=1,status='old',file='lala') read(1,*,end=100) (tmp,i=1,10000) 100 total = i-1 rewind(1) do i=1,10000 read(1,*,end=200) tmp end do 200 lines=i-1 columns = total/lines Sto 1o (emeso) loop diavazei ola ta stoixeia tou pinaka enw sto 2o (ammeso) diavazei enan ari8mo ka8e fora kai meta allazei grammh. Opote diairwntas to synoliko ari8mo me tis grammes vriskeis tis sthles. Meta mporeis na diavaseis ton pinaka sou me > rewind(1) do i=1,lines read(1,*) (a(i,j), j=1,columns) end do Elpizw na voh8hsa
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.