2017-10-13 230 views
1

如何編輯CSV文件中的記錄?編輯CSV記錄

比如我有一個名爲「test.csv」的.csv文件,其內部是:

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

如何編輯"456"並從Not-Active改爲Active

我的唯一方法可以想到它是:

  1. 打開.csv文件。也許將數據存儲在一個字符串中?
  2. 搜索"456","
  3. 獲取"456","的行位置。這個怎麼做?
  4. 刪除我們剛剛獲得位置的行。這個怎麼做?
  5. 重新創建我們想要的行。這個怎麼做?
  6. 將重新創建的數據插入到行位置。這個怎麼做?
  7. 保存.csv文件。

但是有沒有更簡單的方法來做到這一點?

如果不是,我該怎麼做#4,5和6的步驟?

也許將它轉換成一個數組或東西?但我不知道如何在Classic ASP中做到這一點。

+0

[打開,編輯和重新保存一個CSV文件(可能的重複https://stackoverflow.com/questions/19936645/open-edit-and-re- save-a-csv-file) – abr

+0

@abr沒有那是刪除重複的文本,但沒有找到文本,然後編輯該文本右側的文本。不一樣,或者更糟糕,不是肯定的重複 – compcobalt

+0

您讀取文件,以逗號分隔每行,如果第一個字段的值爲「456」,則替換第二個字段的值,然後將數據寫回文件。 –

回答

1

基於Ekkehards答案,這裏是ASP版本。 .csv文件需要位於與.asp腳本相同的目錄中。隨意授予點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

一個simplyfied版本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 

輸出:

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

更容易工作我收到一個錯誤:Microsoft VBScript運行時錯誤'800a01a8'需要的對象:'WScript'。我試圖添加WScript.CreateObject(「WScript.Shell」),但沒有幫助 – compcobalt

+0

我試圖用'Response.write替換WScript.Echo,但沒有奏效。關於我錯過什麼的任何輸入? – compcobalt