Pregunta

Estoy intentando leer y procesar los contenidos de un archivo CSV en SmallTalk (Visualworks), pero parece que tengo un tiempo difícil de dividir la cadena en una matriz por favor.A continuación se muestra el código que he podido trabajar.Lo que me falta es la pieza que divide el contenido de la variable de mi línea, que es una cadena delimitada por comas, en una matriz de cadenas, que se agregará a una twodlist.Por favor, ayude a cualquier información que pueda tener sobre cómo abordar esto, por favor.Gracias

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.

¿Fue útil?

Solución

1) También puede girar una cadena en un flujo, por lo que puede usar la misma técnica que utilizó para analizar el archivo en líneas:

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

2) Puede dividir una cadena en piezas usando tokensbasedon:

myLine tokensBasedOn: $,

Otros consejos

Es posible que desee revisar la CSVParser proyecto en SqueakSource.No debería ser difícil hacer que funcione en visualworks.

Esto le dará soporte para todos los archivos CSV (por ejemplo, con caracteres escapados, campos cotizados, etc.)

También vea esta publicación

alguien portado el neocsv analizador de Pharo a visualworks.Puede resolver su problema.

Probablemente la forma más rápida está cargando la parcela "GHCSVIMPOREXPORTPORT". Entonces puedes hacer:

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top