Sunday, 16/12/2018
News
Home » Tutorial - Series » Perl Tutorial » [Perl] Bài 2 – Thao tác tệp

[Perl] Bài 2 – Thao tác tệp

Trong bài viết trước, chúng ta nói về các yếu tố cốt lõi của Perl: biến (vô hướng, mảng, và băm), các biểu thức toán học và một số vòng lặp cơ bản ( vòng lặp for).

Trong phần này, chúng ta sẽ thảo luận làm thế nào để chia và ghép chuỗi . Làm thế nào để thao tác với file và làm thế nào để xây dựng những hàm (function) riêng cho mình

Toán Tử So Sánh

Có một yếu tố quan trọng của Perl mà chúng ta bỏ qua trong các bài viết trước: toán tử so sánh. Giống như tất cả ngôn ngữ lập trình khác, Perl cho phép bạn đặt câu hỏi như ” Số A lớn hơn số B?” Hoặc “str1 và str2 có phải là 2 chuỗi giống nhau không!?”. Và làm những việc khác nhau tùy thuộc vào câu trả lời.

Khi bạn đang làm việc với các con số, Perl có bốn toán tử quan trọng: < , > , == và != . Đây là những miêu tả “bé hơn hẳn”, “lớn hơn hẳn”, “bằng” và “không bằng”. (Bạn cũng có thể sử dụng <= , “bé hơn hoặc bằng,” và >= , “lớn hơn hoặc bằng”).

Bạn có thể sử dụng các toán tử cùng với một trong những từ khóa có điều kiện Perl, chẳng hạn như if và unless . Cả hai từ khóa có một điều kiện rằng Perl sẽ kiểm tra, và một khối mã trong dấu ngoặc nhọn rằng Perl sẽ chạy nếu kiểm tra hoạt động. Hai từ này làm việc giống như tương đương tiếng Anh của mình – một if thực thi thành công nếu điều kiện là đúng sự thật, và unless thực thi nếu điều kiện là sai:

Hãy cẩn thận về sự khác biệt giữa = và == ! Một dấu bằng có nghĩa là “gán”, hai dấu bằng có nghĩa là “so sánh tương đương”. Thông thường , đây là lỗi nguy hiểm:

Thay vì kiểm tra xem $a bằng 5, bạn đã thực hiện gán $a bằng 5 và clobbered giá trị cũ của nó. (Trong một bài viết sau, chúng tôi sẽ thảo luận một cách chắc chắn rằng lỗi này sẽ không xảy ra trong việc thực thi mã.)

Cả hai if và unless có thể được theo sau bởi một tuyên bố else và khối mã, nó sẽ thực hiện nếu điều kiện của bạn thất bại. Bạn cũng có thể sử dụng elsif đến chuỗi lại với nhau một loạt các if :

While và Until
Hai từ khóa hơi phức tạp hơn là while và until . Cả hai đều có một điều kiện và một khối mã, giống như if và unless , nhưng chúng hành động như các vòng lặp tương tự như for . Perl kiểm tra điều kiện, chạy các khối mã và chạy nó tiếp tục cho đến khi điều kiện là đúng (nếu sử dụng vòng lặp while) hoặc sai (nếu sử dụng vòng lặp until).

Hãy xem đoạn mã sau và cố gắng đoán những gì nó sẽ làm trước khi đọc tiếp:

Đây là những gì bạn nhìn thấy khi bạn chạy chương trình này:

So Sánh Chuỗi

Ở trên là cách bạn so sánh các con số. Bây giờ, so sánh về chuỗi với chuỗi ? Toán tử so sánh chuỗi phổ biến nhất là “eq” , dùng để kiểm tra sự tương đương nhau giữa 2 chuỗi.

Nhớ sự cố xảy ra khi bạn nhầm lẫn sử dụng = và == ? Vâng, bạn cũng có thể nhầm lẫn lên == và eq . Đây là một trong số ít các trường hợp nó không quan trọng cho dù Perl được xử lý một giá trị như là một chuỗi hoặc một số. Thử mã này:

Tại sao đoạn mã này nghĩ rằng bạn nói có? Hãy nhớ rằng Perl sẽ tự động chuyển chuỗi số để bất cứ khi nào nó cần thiết , toán tử == ngụ ý rằng bạn đang sử dụng số, vì vậy Perl sẽ chuyển giá trị “no” mà bạn đã gán cho biến $yes_no thành số 0 và giá trị “yes” khi so sánh cũng là số 0. Và khi nó thực thi việc kiểm tra điều kiện (if 0 == 0 ), điều này là đúng nên khối lệnh sẽ thực thi. Nhưng mục đích của chúng ta là so sánh chuỗi (chính xác 2 chuỗi với nhau) nên ta sẽ thay thế == bởi eq

Những điều có thể làm việc theo cách khác, quá. Số 5 là số có giá trị tương đương với chuỗi ” 5 ” , do đó so sánh chúng với == . Nhưng khi bạn so sánh 5 và ” 5 ” với eq , Perl sẽ chuyển đổi số vào chuỗi “5” đầu tiên, và sau đó hỏi xem hai chuỗi có cùng giá trị. Khi đó , eq so sánh thất bại. Ví dụ sau sẽ in Numeric equality mà không in String equality

Bạn thường muốn thao tác chuỗi: Phá vỡ chúng thành từng miếng nhỏ, đặt chúng lại với nhau và thay đổi nội dung của chúng. Perl cung cấp ba chức năng mà làm cho thao tác với chuỗi dễ dàng và thú vị: substr() , split() và join() .

Nếu bạn muốn lấy một phần của một chuỗi (Như: “Lấy bốn ký tự đầu tiên” hoặc “Một đoạn gồm 10 ký tự nằm ở giữa”), sử dụng substr() . Phải mất hai hoặc ba thông số: chuỗi bạn muốn xem, vị trí ký tự bắt đầu (ký tự đầu tiên là vị trí 0) và số ký tự để lấy. Nếu bạn bỏ qua tham số là số ký tự, bạn sẽ lấy lại tất cả mọi thứ cho đến cuối của chuỗi.

Một điều nhỏ và thường bị bỏ qua về substr() là bạn có thể sử dụng một vị trí âm cho ký tự thao tác. Điều này sẽ lấy một chuỗi con bắt đầu với rất nhiều ký tự từ khi kết thúc của chuỗi.

(Hãy nhớ rằng bên trong dấu ngoặc kép, \n đại diện cho việc xuống hàng.)

Bạn cũng có thể thao tác các chuỗi bằng cách sử dụng substr() để gán một giá trị mới cho một phần của nó. Một thủ thuật hữu ích là sử dụng chiều dài là 0 để chèn các ký tự thành một chuỗi:

Tiếp theo, chúng ta hãy xem lệnh split() . Chức năng này tách rời một chuỗi và trả về một danh sách các phần tử. Split() thường có hai tham số: một biểu hiện thường xuyên để chia chuỗi với chuỗi và bạn muốn chia. (Chúng ta sẽ thảo luận về biểu thức thông thường chi tiết hơn trong phần tiếp theo, vì thời điểm này, chúng ta sẽ chỉ sử dụng space Chú ý cú pháp đặc biệt cho một biểu thức chính quy:. / / .)
Bạn cũng có thể chỉ định một tham số thứ ba: số lượng tối đa các phần để đưa vào danh sách của bạn. Việc chia tách sẽ ngừng ngay sau khi danh sách của bạn đạt được số phần như bạn đưa ra
Tất nhiên, những gì bạn có thể chia nhỏ, bạn cũng có thể ghép lại với lệnh join() . Chức năng join() có một danh sách các chuỗi và gắn chúng lại với nhau bằng một chuỗi quy định giữa mỗi phần tử, có thể là một chuỗi rỗng:
1 Star2 Stars3 Stars4 Stars5 Stars6 Stars7 Stars8 Stars9 Stars10 Stars (No Ratings Yet)
Loading...

One comment

Leave a Reply

Your email address will not be published. Required fields are marked *

*

:cuoi: :hix: :hihihi: :kiss: :sexy: :dotay: :ngacnhien: :oh: :love: more »