2011-08-14 29 views
6

Làm cách nào tôi có thể chuyển đổi một vô hướng chứa chuỗi có dòng mới trong một mảng với các dòng đó thành các phần tử?Vô hướng với các dòng để mảng

Ví dụ, xem xét điều này:

$lines = "line 1\nline 2\nline 3\n"; 

Tôi muốn lấy này:

$lines[0] --> "line 1\n" 
$lines[1] --> "line 2\n" 
$lines[2] --> "line 3\n" 

Lý tưởng nhất, tôi muốn giữ xuống dòng trong các yếu tố aray.

Trả lời

2

Sử dụng split:

my @lines = split(/\n/m, $lines); 

EDIT: để giữ cho dòng mới, tách trên /^/m như đã đề cập trong các ý kiến, hoặc sử dụng một zero-width nhìn phía sau, như đã đề cập trong câu trả lời khác.

+0

Cảm ơn. Chỉ trong trường hợp: có thể giữ dòng mới không? Và xin lỗi, tôi nên tuyên bố rằng trong câu trả lời rõ ràng hơn. –

+5

Thay vào đó hãy thử chia nhỏ trên '/ ^/m'. –

+0

Cảm ơn @Jim Davis, hoạt động tốt. Trận đấu không rộng, ý tưởng thông minh. –

4

Một cách là sử dụng split rồi map.

use warnings; 
use strict; 

my $lines = "line 1\nline 2\nline 3\n"; 
my @lines = map { "$_\n" } split /\n/, $lines; 
+1

Cảm ơn công cụ, trông giống như một chút tiên tiến với tôi (Perl mới bắt đầu) nhưng chắc chắn một cái gì đó để điều tra, tôi không bao giờ sử dụng bản đồ. –

+1

Bạn được chào đón. Tôi mất một lúc để quấn đầu quanh 'map', nhưng bây giờ tôi có, tôi thường xuyên sử dụng nó. Hãy suy nghĩ về nó như thực hiện một số hoạt động trên mọi phần tử của một mảng (hoặc danh sách). Trong trường hợp này, tôi chỉ thêm '\ n' vào mọi dòng. – toolic

+3

@new 'map' khá hữu ích, và không khó chút nào. Tôi có thể khuyên bạn nên học cách sử dụng nó. – TLP

7

Bạn có thể sử dụng một cái nhìn phía sau tiêu cực để bảo tồn xuống dòng trong phân chia:

@lines = split /(?<=\n)/, $lines; 
+1

+1 Câu trả lời hay. –

3

Một cách khác, mà không split:

use warnings; 
use strict; 

my $lines = "line 1\nline 2\nline 3\n"; 
my @lines = $lines =~ /(.*\n)/g; 
+1

+1, Chỉ cần ấn tượng. – sidyll

+0

Tôi nghĩ rằng điều này sẽ mất một dòng vào cuối mà không kết thúc bằng một dòng mới. Có lẽ 'my @lines = $ lines = ~/(. * \ N?)/G;'? –

+0

@Jelel, mã của bạn sẽ thêm phần tử trống vào mảng '@ lines' cho dữ liệu đầu vào của OP. Đó không phải là những gì OP muốn. – toolic

Các vấn đề liên quan