2017-10-13 7 views
1

CSV 파일의 레코드를 편집하려면 어떻게합니까? 예를 들어CSV 레코드 편집

나는 "test.csv"라는 .csv 파일이 있고 그 안에있다 :

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

내가 "456"을 편집하고 Active

유일한 방법 I에 Not-Active에서 변경할 수있는 방법 그것이라고 생각할 수 있습니다 :

  1. .csv 파일을 엽니 다. 어쩌면 문자열 안에 데이터를 저장할 수 있을까요?
  2. "456","을 검색하십시오.
  3. "456","의 줄 위치를 가져옵니다. 이 작업을 수행하는 방법?
  4. 방금 ​​위치를 얻은 줄을 삭제하십시오. 이 작업을 수행하는 방법?
  5. 원하는대로 줄을 다시 만듭니다. 이 작업을 수행하는 방법?
  6. 다시 작성한 데이터를 줄 위치에 삽입하십시오. 이 작업을 수행하는 방법?
  7. .csv 파일을 저장하십시오.

하지만 더 쉬운 방법은 없나요?

그렇다면 4, 5 및 6 단계는 어떻게 수행합니까?

어쩌면 그것을 배열이나 다른 것으로 변환 할 수 있습니까? 그러나 Classic ASP에서이 작업을 수행하는 방법을 모릅니다.

+0

가능한 중복 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 
%> 
[열기, 편집 및 CSV 파일을 다시 저장] (의
1

script @abr mentioned의 simplyfied 버전 :

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

WScript.Echo를 'Response.write'로 대체하려고 시도했지만 그 작업은하지 않았다. 내가 누락 된 부분에 대한 의견이 있습니까? – compcobalt