2012-03-12 39 views
6

Tôi đang cố gắng đọc và xử lý nội dung của tệp csv trong smalltalk (visualworks), nhưng dường như tôi đang gặp khó khăn khi nhận chuỗi một mảng xin vui lòng. Dưới đây là mã tôi đã có thể làm việc. Những gì tôi đang thiếu là mảnh chia tách nội dung của biến myLine, là một chuỗi được phân tách bằng dấu phẩy, thành một mảng các chuỗi, được thêm vào một TwoDList. Xin vui lòng giúp đỡ với bất kỳ thông tin bạn có thể có về cách tiếp cận này xin vui lòng. Cảm ơnLàm thế nào để, trong smalltalk, đọc và xử lý nội dung của tệp CSV

SpreadsheetReadCSV: inFilename 
    |inStream myLine rcnt| 
     rcnt := 0. 
     " scan thru the text lines, using a traditional i/o loop " 
     inStream := (inFilename asFilename) readStream . 
     [ inStream atEnd ] whileFalse: [ 
      rcnt := rcnt + 1. 
      myLine := inStream upTo: Character cr. 
       "Process the commadelimited string here" 
     ]. 
     inStream inspect. 
     inStream close. 
    ^myLine. 

Trả lời

6

1) Bạn có thể bật một chuỗi thành một dòng suối là tốt, vì vậy bạn có thể sử dụng kỹ thuật tương tự mà bạn sử dụng để phân tích các tập tin vào dòng:

myLine := (inStream upTo: Character cr) readStream. 
[ myLine atEnd ] whileFalse: [ | myCell | 
    myCell := myLine upTo: $,. 
    "Do whatever with the cell" ] 

2) Bạn có thể chia một chuỗi thành từng phần bằng cách sử dụng tokensBasedOn:

myLine tokensBasedOn: $, 
+0

Cảm ơn toàn bộ quá trình chỉnh sửa. Ngoài ra, tôi không có tokenBasedOn: như một tin nhắn trong phiên bản VisualWorks của tôi. Có cách nào để nhập thư viện mới vào VisualWorks mà tôi có thể tận dụng? – Kobojunkie

+0

Tin nhắn đó đã ở trong VW cơ sở ít nhất là xa như VW 7.0. Lưu ý rằng số nhiều, mã thông báo ... Dựa trên: –

+0

lỗi của tôi. Tìm thấy rồi! Cảm ơn – Kobojunkie

3

Bạn có thể muốn xem dự án CSVParser trên squeaksource. Nó không phải là khó khăn để làm cho nó hoạt động trong Visualworks.

này sẽ cung cấp cho bạn hỗ trợ cho tất cả các file csv (ví dụ với ký tự thoát, lĩnh vực trích dẫn, vv)

Xem thêm this post

1

Có lẽ cách nhanh nhất được tải Parcel "GHCsvImportExport". Sau đó, bạn có thể làm:

| reader lines | 
reader := CsvReader onFileNamed: aFilename. 
[lines := OrderedCollection new. 
[reader atEnd] whileFalse: 
    [lines add: reader nextLine.]] 
    ensure: [reader close]. 
lines inspect. 
2

Someone ported các NeoCSV phân tích cú pháp từ Pharo để VisualWorks. Nó có thể giải quyết vấn đề của bạn.

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