Question

Je tente de lire et de traiter le contenu d'un fichier CSV dans SmallTalk (Visualworks), mais il semble que j'ai du mal à obtenir la chaîne de se diviser dans une matrice s'il vous plaît.Vous trouverez ci-dessous un code que j'ai pu faire fonctionner.Ce qui me manque, c'est la pièce qui scindre le contenu de la variable myLine, qui est une chaîne délimitée par des virgules, dans une gamme de chaînes, à ajouter à une discussion.Veuillez vous aider avec toutes les informations que vous pourriez avoir sur la manière de vous approcher.Merci

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.

Était-ce utile?

La solution

1) Vous pouvez également transformer une chaîne en un flux. Vous pouvez ainsi utiliser la même technique que vous avez utilisée pour analyser le fichier dans les lignes suivantes:

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

2) Vous pouvez diviser une chaîne en morceaux en utilisant Tokensbasedon:

myLine tokensBasedOn: $,

Autres conseils

Vous voudrez peut-être consulter le CSVPARSER projet sur SqueakSource.Il ne devrait pas être difficile de le faire fonctionner dans Visualworks.

Cela vous permettra de prendre en charge tous les fichiers CSV (par exemple avec des caractères échappés, des champs cités, etc.)

Voir aussi Ce message

Quelqu'un a porté le Neocsv analgésière de Pharo à Visualworks.Cela pourrait résoudre votre problème.

Probablement le moyen le plus rapide est de charger le colis "ghcsvimportexport". Ensuite, vous pouvez faire:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top