2017-10-13 8 views
1

Comment modifier un enregistrement dans un fichier CSV?Modifier un enregistrement CSV

par exemple, j'ai un fichier .csv nommé « test.csv » et à l'intérieur est:

 
"123","Active" 
"456","Not-Active" 
"999000123","Active" 

Comment puis-je modifier "456" et changer Not-Active-Active

La seule façon peut penser à c'est:

  1. Ouvrez le fichier .csv. Peut-être stocker les données dans une chaîne?
  2. Rechercher "456",".
  3. Obtenez la position de ligne "456",". Comment faire ça?
  4. Supprime la ligne dont nous venons juste de recevoir la position. Comment faire ça?
  5. Recréez la ligne avec ce que nous voulons. Comment faire ça?
  6. Insérez les données recréées dans la position de ligne. Comment faire ça?
  7. Enregistrez le fichier .csv.

Mais n'y a-t-il pas un moyen plus simple de le faire?

Et si non, comment faire les étapes 4, 5 et 6? Peut-être pour le convertir sur un tableau ou quelque chose? Mais je n'ai aucune idée de comment le faire dans ASP classique.

+0

double possible de [Ouvrir, Modifier et Re-Enregistrer un fichier CSV] (https://stackoverflow.com/questions/19936645/open-edit-and-re- save-a-csv-file) – abr

+0

@abr Non, c'était pour supprimer le texte en double, mais pas pour trouver du texte, puis éditer le texte à droite de ce texte. Pas le même ou pire pas un doublon à coup sûr – compcobalt

+0

Vous lisez le fichier, divisez chaque ligne par des virgules, remplacez la valeur du deuxième champ si le premier champ a la valeur '" 456 "', puis réécrivez les données dans le fichier . –

Répondre

1

Sur la base de réponse Ekkehards, voici la version ASP. Le fichier .csv doit être situé dans le même répertoire que le script .asp. Sentez-vous libre d'attribuer les points à Ekkehard

<%@LANGUAGE="VBSCRIPT"%> 
<% option explicit %> 

<% 
Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 
Dim tsIn : Set tsIn = goFS.OpenTextFile(Server.MapPath("46734115.csv")) 
Dim tsOut : Set tsOut = goFS.CreateTextFile(Server.MapPath("46734115-2.csv")) 
Dim sLine 
Do Until tsIn.AtEndOfStream 
    sLine = tsIn.ReadLine() 
    dim pos : pos = instr(sLine, """456"",") 
    Response.Write(pos) 
    if pos > 0 then 
     ' to keep things simple, just replace the whole line 
     sLine = """456"",""Active""" 
    end if 
    tsOut.WriteLine sLine 
    ' Just so there is something to see: print line to the browser window 
    Response.Write(sLine & "<br />") 
Loop 
tsOut.Close 
tsIn.Close 
%> 
1

Une version simplyfied du script @abr mentioned:

Dim goFS : Set goFS = CreateObject("Scripting.FileSystemObject") 
Dim tsIn : Set tsIn = goFS.OpenTextFile("..\data\46734115.csv") 
Dim tsOut : Set tsOut = goFS.CreateTextFile("..\data\46734115-2.csv") 
Dim sLine 
Do Until tsIn.AtEndOfStream 
    sLine = tsIn.ReadLine() 
    WScript.Echo "<", sLine 
    If "456," = Left(sLine, 4) Then 
     sLine = "789,""something else""" 
    End If 
    WScript.Echo ">", sLine 
    tsOut.WriteLine sLine 
    WScript.Echo  
Loop 
tsOut.Close 
tsIn.Close 

sortie:

type ..\data\46734115.csv 
123,"Active" 
456,"Not-Active" 
999000123,"Active" 

cscript 46734115-3.vbs 
< 123,"Active" 
> 123,"Active" 

< 456,"Not-Active" 
> 789,"something else" 

< 999000123,"Active" 
> 999000123,"Active" 

type ..\data\46734115-2.csv 
123,"Active" 
789,"something else" 
999000123,"Active" 
+0

Je reçois une erreur: Erreur d'exécution Microsoft VBScript '800a01a8' Objet requis: 'WScript'. J'ai essayé d'ajouter WScript.CreateObject ("WScript.Shell") mais cela n'a pas aidé – compcobalt

+0

J'ai essayé de remplacer WScript.Echo par 'Response.write mais cela n'a pas fonctionné. Toute contribution sur ce qui me manque? – compcobalt