Δίνεται μια συμβολοσειρά που αναπαριστά έναν πίνακα αριθμών, επέστρεψε τις γραμμές και τις στήλες αυτού του πίνακα.
Έτσι, δίνεται μια συμβολοσειρά με ενσωματωμένες αλλαγές γραμμής, όπως:
9 8 7
5 3 2
6 6 7
που αναπαριστά αυτόν τον πίνακα:
1 2 3
|---------
1 | 9 8 7
2 | 5 3 2
3 | 6 6 7
ο κώδικάς σου θα πρέπει να μπορεί να βγάλει:
Οι γραμμές για τον πίνακα του παραδείγματός μας:
Και οι στήλες του:
Αυτή είναι η πρώτη άσκηση όπου η λύση δεν είναι ένα σενάριο "main". Ο στόχος είναι να γράψεις μια βιβλιοθήκη από συναρτήσεις που θα συμπεριληφθεί σε άλλα προγράμματα awk. Υπάρχουν αρκετές ενδιαφέρουσες νέες έννοιες που θα δεις σε αυτή την άσκηση.
Οι παρακάτω ενότητες που έχουν τη σήμανση "(gawk)" είναι ειδικά επεκτάσεις της GNU awk.
Σε αυτή την άσκηση θα διαβάζεις δεδομένα από ένα αρχείο, όχι από την κύρια ροή εισόδου.
Διάβασε για τη getline στο εγχειρίδιο της Gnu awk,
ειδικά τις μορφές Getline/File και Getline/Variable/File.
Ένας δισδιάστατος πίνακας μπορεί να είναι ένας τρόπος να υλοποιήσεις αυτή τη λύση. Η GNU awk έχει δύο τρόπους να τον αναπαραστήσει:
Πρόσεξε την οδηγία @include στο αρχείο δοκιμών.
Αυτή δίνει εντολή στη gawk να διαβάσει και να αξιολογήσει το αρχείο που αναφέρεται.
Όλες οι μεταβλητές της awk είναι καθολικές (εκτός από τις παραμέτρους των συναρτήσεων, που είναι τοπικές στη συνάρτηση).
Υπάρχει μεγάλη πιθανότητα συγκρούσεων ονομάτων, ειδικά όταν συμπεριλαμβάνονται βιβλιοθήκες τρίτων.
Οι χώροι ονομάτων είναι ένας τρόπος να χωρίσεις το πού αποθηκεύονται οι μεταβλητές.
Πρόσεξε την οδηγία @namespace στα αρχεία της άσκησης.
Ο προεπιλεγμένος χώρος ονομάτων ονομάζεται "awk". Η ύπαρξη ενός προεπιλεγμένου χώρου ονομάτων επιτρέπει στον προγραμματιστή να καλέσει μια ενσωματωμένη συνάρτηση της awk μέσα από μια συνάρτηση σε διαφορετικό χώρο ονομάτων.
Οι παράμετροι που είναι πίνακες περνιούνται κατ' αναφορά. Οι αλλαγές που γίνονται στον πίνακα μέσα στη συνάρτηση είναι ορατές σε αυτόν που κάλεσε τη συνάρτηση.
Οι παράμετροι που δεν είναι πίνακες περνιούνται κατ' αξία.
Για τις παραμέτρους χωρίς τύπο, εξαρτάται από το τι κάνει η συνάρτηση με αυτές:
Οι πλήρεις λεπτομέρειες βρίσκονται στο εγχειρίδιο, στο Πέρασμα ορισμάτων συνάρτησης κατ' αξία ή κατ' αναφορά.
Οι μεταβλητές με εμβέλεια συνάρτησης (τοπικές) μπορούν να δημιουργηθούν χρησιμοποιώντας παραμέτρους που περνιούνται "κατ' αξία". Δεν είναι σφάλμα να περάσεις σε μια συνάρτηση λιγότερες τιμές από τον αριθμό των παραμέτρων που δηλώνονται· οι επιπλέον παράμετροι είναι "χωρίς τύπο" μέχρι να χρησιμοποιηθούν. Μπορούν να δεχτούν βαθμωτές τιμές μέσα στη συνάρτηση, οι οποίες δεν αποθηκεύονται στον καθολικό χώρο ονομάτων.
Κατά σύμβαση, στην υπογραφή της συνάρτησης οι αναμενόμενες παράμετροι εμφανίζονται πρώτες, ακολουθούμενες από λευκό διάστημα και μετά από τις τοπικές παραμέτρους. Ένα παράδειγμα:
function add(a, b, total) {
# here, `typeof(total)` is "untyped"
total = a + b
# now, `typeof(total)` is "number"
return total
}
BEGIN {
sum = add(5, 10)
print sum # 15
print typeof(total) # untyped, meaning "total" is unused in this scope
}
Γράψου στο Exercism για να μάθεις και να κατακτήσεις AWK με 3 έννοιες92 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.