Dimitrsthras Δημοσ. 11 Φεβρουαρίου 2016 Δημοσ. 11 Φεβρουαρίου 2016 Έχω τον παρακάτω κώδικα και μου βγάζει Runtime Error 123 μπορεί κανείς να βοηθήσει; Γνωρίζω πως το Runtime Error 123 είναι : ERROR_INVALID_NAME αλλά και πάλι δεν μπορώ να βγάλω άκρη. ( http://narkive.com/yFy16Nvq:7.534.18 ) program iniz; var arxeio:text;ono,ari:string;kin:longint;beginwriteln ('Γράψε το ονοματεπώνυμό σου:');readln (ono);writeln ('Γράψε τον αριθμό κυκλοφορίας του οχήματος σου:');readln (ari);writeln('Γράψε το κινητό τηλέφωνο σου:');readln(kin);assign(arxeio,'C:\Users\Dimitristhras\Desktop\file.txt');append(arxeio);writeln (arxeio,ono);writeln (arxeio,ari);writeln (arxeio,kin);writeln (ono);writeln (ari);writeln (kin);close (arxeio);end.
M2000 Δημοσ. 11 Φεβρουαρίου 2016 Δημοσ. 11 Φεβρουαρίου 2016 Είσαι σίγουρος ότι μπορείς με readln() να πάρεις αριθμό; Μήπως να έπαιρνες string καλύτερα, για το τηλέφωνο. Αν και αυτό θα το έβρισκε ο compiler. Μάλλον έχεις ανοικτό αρχείο και σε πετάει το πρόγραμμα..
Dimitrsthras Δημοσ. 11 Φεβρουαρίου 2016 Μέλος Δημοσ. 11 Φεβρουαρίου 2016 και γω αυτό πίστευα κιόμως δεν εχω τίποτα ανοιχτό .. ούτε κάποιο process στα windows ουτε τίποτα ..προσπάθησα να το τρέξω σε άλλο υπολογιστή αλλά είχα το ίδιο προβλημα.
Επισκέπτης Δημοσ. 11 Φεβρουαρίου 2016 Δημοσ. 11 Φεβρουαρίου 2016 hint: όπως είναι ο κώδικας σου προϋπόθεση είναι το αρχείο που πας να γράψεις να υπάρχει...
timkoni Δημοσ. 11 Φεβρουαρίου 2016 Δημοσ. 11 Φεβρουαρίου 2016 δοκιμασε να αλλάξεις το filename του αρχείου , και επίσης υπάρχει περίπτωση να ξεπερνάς το όριο χαρακτήρων σε μια γραμμή, δοκίμασε στα writeln να βάλεις λιγότερο κείμενο.
Dimitrsthras Δημοσ. 11 Φεβρουαρίου 2016 Μέλος Δημοσ. 11 Φεβρουαρίου 2016 hint: όπως είναι ο κώδικας σου προϋπόθεση είναι το αρχείο που πας να γράψεις να υπάρχει... Υπάρχει το αρχείο Και έχω ελέγξει τα ονόματα όλα και είναι σωστά δοκιμασε να αλλάξεις το filename του αρχείου , και επίσης υπάρχει περίπτωση να ξεπερνάς το όριο χαρακτήρων σε μια γραμμή, δοκίμασε στα writeln να βάλεις λιγότερο κείμενο. εχω δοκιμασει τα παντα πραγματικα δεν βγαζω ακρη
timkoni Δημοσ. 11 Φεβρουαρίου 2016 Δημοσ. 11 Φεβρουαρίου 2016 Άλλαξε compiler , πχ fpc, lazarus Επίσης ψάξε στο documention της pascal για αυτό το error code Επίσης δοκίμασε να αποθηκεύσεις τον κώδικα σε utf-8 , γιατί μπορεί να φταίνε τα ελληνικά , πρώτα απολα άλλαξε τα ελληνικά και αν φταίνε βαλε το utf-8
White_Cat Δημοσ. 11 Φεβρουαρίου 2016 Δημοσ. 11 Φεβρουαρίου 2016 Αγαπητέ Dimitrsthras και το υπόλοιπο νήμα,Αυτό το λάθος το βγάζει επειδή η εντολή append την οποίαν χρησιμοποιείς προϋποθέτει ότι το αρχείο που θέλουμε ν' ανοίξουμε υπάρχει ήδη. Έτσι όταν τρέχεις αυτό το πρόγραμμα, χωρίς να έχει εκ των προτέρων δημιουργηθεί το file.txt, ο υπολογιστής προσπαθεί ν' ανοίξει ένα αρχείο το οποίο δεν υπάρχει. Αυτή ακριβώς η κατάσταση παράγει το σφάλμα κατά το χρόνο εκτέλεσης του προγράμματος. Για να λυθεί το πρόβλημα, αρκεί να παρεμβάλουμε μια συνθήκη η οποία να έχει την εξής μορφή :AN το αρχειό file.txt υπάρχει τότε άνοιξέ το για προσθήκη εγγραφών ΑΛΛΙΩΣ δημιούργησέ το εξ αρχήςΗ Pascal διαθέτει τη συνάρτηση FileExists η οποία ελέγχει αν ένα δεδομένο αρχείο ήδη υπάρχει ή όχι. Δέχεται ως όρισμα εισόδου το όνομα του αρχείου σε αλφαριθμητική μορφή και επιστρέφει μία λογική τιμή (true ή false), ανάλογα με το αν θα εντοπίσει το αρχείο. Η συνάρτηση αυτή δεν ανήκει στον κορμό των εντολών της Pascal, αλλά στη μονάδα SysUtils. Άρα πριν απ' όλα, πάνω-πάνω στο πρόγραμμα απαιτείται η δήλωση :Uses SysUtils ;Για ν' ανοιξουμε το αρχείο για προσθήκες εγγραφών χρησιμοποιούμε την εντολή append. Άμα όμως η FileExists επιστρέψει ψευδή τιμή, τότε θα πρέπει να το δημιουργήσουμε εξ αρχής και γι' αυτό το σκοπό η σωστή εντολή είναι η rewrite.Άρα η συνθήκη που λύνει το πρόβλημα έχει ως εξής :IF FileExists('file.txt') THEN append(arxeio) ELSE rewrite)arxeio);Υπάρχει κάτι ακόμα που το άφησα για το τέλος. Προτείνω ακόμα και η μεταβλητή kin να δηλωθεί σαν string, γιατί δεν είμαι απόλυτα βέβαιος άμα ο τύπος longint δέχεται δεκαψήφιους ακεραίους. Άμα αργότερα θέλουμε σώνει και καλά να μετατρέψουμε το αλφαριθμητικό kin σε αριθμητική τιμή, αρκεί η συνάρτηση val(kin).Το πρόγραμμα το έτρεξα με τον Free Pascal Compiler σε περιβάλλον Linux, όπου όλα τα αλφαριθμητικά τα έχω ορίσει ως UTF8 κι έτρεξε κανονικά. Μου επέτρεψε να το τρέξω ξανά και ξανά και να κάνω πολλές προσθήκες εγγραφών στο file.txt.Παρακάτω δίνω συνολικά το διορθωμένο κώδικα :program iniz;Uses Sysutils;var arxeio:Text;ono,ari:string;kin:String;beginwriteln ('Γράψε το ονοματεπώνυμό σου:');readln (ono);writeln ('Γράψε τον αριθμό κυκλοφορίας του οχήματος σου:');readln (ari);writeln('Γράψε το κινητό τηλέφωνο σου:');readln(kin);assign(arxeio,'file.txt');if fileexists('file.txt') then append(arxeio) else rewrite(arxeio);writeln (arxeio,ono);writeln (arxeio,ari);writeln (arxeio,kin);writeln (ono);writeln (ari);writeln (kin);close (arxeio);end.Καλή σας νύχτα,Μ' ένα ζεστό νιαούρισμα,Ο Άσπρος Γάτος 2
Dimitrsthras Δημοσ. 12 Φεβρουαρίου 2016 Μέλος Δημοσ. 12 Φεβρουαρίου 2016 αψογος ο ασπρος γατος πραγματικά βοήθησε παρα πολύ! το ετρεξα στα windows με τον fpc compiler χωρις ομως να ορίσω όλα τα αλφαριθμητικά σε utf8ευχαριστώ πολύ!
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα