2015-12-05 13 views
5

Tôi đã cố gắng để có một tập tin được đọc, sau đó sẽ đưa các tài liệu đọc vào một chuỗi. Sau đó, chuỗi sẽ được chia theo dòng thành nhiều chuỗi:Golang: Các vấn đề thay thế dòng mới trong một chuỗi từ một tập tin văn bản

absPath, _ := filepath.Abs("../Go/input.txt") 
data, err := ioutil.ReadFile(absPath) 
if err != nil { 
    panic(err) 
} 
input := string(data) 

Các INPUT.TXT được đọc như sau:

một

chim chút mạnh mẽ

với rất

trái tim lớn

đi

đến trường một ngày và

quên thực phẩm của mình tại

nhà

Tuy nhiên,

re = regexp.MustCompile("\\n") 
input = re.ReplaceAllString(input, " ") 

biến văn bản vào một mớ hỗn độn nham nhở của:

homeot thực phẩm của mình atand

Tôi không chắc chắn như thế nào thay thế dòng mới có thể mess lên rất nặng tới điểm mà văn bản sẽ đảo ngược bản thân

Trả lời

9

Tôi đoán rằng bạn đang chạy các mã sử dụng Windows. Quan sát rằng nếu bạn in ra chiều dài của chuỗi kết quả, nó sẽ hiển thị một cái gì đó hơn 100 ký tự. Lý do là Windows không chỉ sử dụng dòng mới (\n) mà còn trả về vận chuyển (\r) - vì vậy một dòng mới trong Windows thực sự là \r\n, không phải là \n. Để lọc chúng đúng cách ra khỏi chuỗi của bạn, hãy sử dụng:

re = regexp.MustCompile(`\r?\n`) 
input = re.ReplaceAllString(input, " ") 

Backticks sẽ đảm bảo rằng bạn không cần báo giá dấu gạch chéo ngược trong cụm từ thông dụng. Tôi đã sử dụng dấu chấm hỏi cho việc vận chuyển trở lại để đảm bảo rằng mã của bạn cũng hoạt động trên các nền tảng khác.

1

Tôi không nghĩ rằng bạn cần phải sử dụng regex cho một nhiệm vụ dễ dàng như vậy. Điều này có thể đạt được với chỉ

absPath, _ := filepath.Abs("../Go/input.txt") 
data, _ := ioutil.ReadFile(absPath) 
input := string(data) 
strings.Replace(input, "\n","",-1) 

example of removing \n

+1

Điều đó sẽ không giải quyết được vấn đề này mặc dù, vì - như Jens nói - Windows newlines ('\ r \ n') đang gây ra hiệu ứng mô tả khi chỉ '\ n' được thay thế trong khi để lại' \ r' trong chuỗi. – madsen

+3

@madsen bạn có nghĩ rằng nếu '\ r \ n' đang gây ra sự cố, có thể có nghĩa là xóa' \ r \ n'? Hoặc thay thế dòng 'string.Replace (đầu vào," \ n "," ", - 1)' thành 'chuỗi. Thay thế (đầu vào," \ r \ n "," ", - 1)' một nhiệm vụ không thể cho bạn? –

+2

Không có lý do để tích cực. Điểm của bạn về không nhất thiết cần regex là tốt, nhưng câu trả lời của bạn không giúp OP giải quyết vấn đề thực tế của mình. – madsen

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