2011-08-13 5 views
0

누군가이 파일을 yaml 파일로 출력하는 데 도움이 될지 궁금하십니까?CSV에서 yaml 파일로 작성 하시겠습니까?

현재로서는 yaml 파일에 반환 된 마지막 배열 만 씁니다.

 require 'csv' 
     require 'yaml' 
      #fp = File.open("vatsim-row.txt") 

CSV.foreach("vatsim-data.txt", :col_sep =>':', :row_sep =>:auto, :quote_char => ":") do |row| 

if (row[3] == "PILOT") and (row[13]=="EIDW" or row[13]=="EICK" or row[13]=="EINN" or row[13]=="EIKN" or row[13]=="EIDL" or row[13]=="EICM" or row[13]=="EIKY" or row[13]=="EISG" or row[13]=="EIWF" or row[13]=="EIWT" or row[11]=="EIDW" or row[11]=="EICK" or row[11]=="EINN" or row[11]=="EIKN" or row[11]=="EIDL" or row[11]=="EICM" or row[11]=="EIKY" or row[11]=="EISG" or row[11]=="EIWF" or row[11]=="EIWT") 

p row 

p row.count 

File.open("pilots.yml", "w") {|f| f.write(row.to_yaml) } 

elsif row[3] == "ATC" and (row[0].slice(0, 3) == "EGC" or row[0].slice(0, 3) == "EID" or row[0].slice(0, 3) == "EIC" or row[0].slice(0, 3) == "EIN" or row[0].slice(0, 3) == "EIK" or row[0].slice(0, 3) == "EIS" or row[0].slice(0, 3) == "EIW" or row[0].slice(0, 3) == "EIM") 

       p row 
       p row.count 
      end 

     end 

내가 YAML 파일을 찾고 출력의 종류 : 사람이 방향으로 날 지점 수 있다면

--- 
clients: 
callsign: RYR87LN 
    cid:  "123456" 
    name:  Joe Blogs EIDW 
    type:  PILOT 
    lat:  "48.28681" 
    long:  "-4.03478" 
    altitude: "30883" 
    groundspeed:"438" 
    aircraft: B738 
    p_cruise: "300" 
    dep:  LFRS 
    p_alt: FL310 
    arr: EIDW 
    server: EUROPE-C2 
    pro_rev: "100" 
    rating: "1" 
    squawk: "2200" 
    facilitytype: 
    vis_range: 
    p_flighttyp: "0" 
    route: FPL-RYR87LN-IS-B738/M-ZSRWY/S-REG/EI-DAH COM/TCAS RVR/200 OPR/RYRVIRTUAL.COM DOF/110813- A/BLUE/WHITE/YELLOW /V/ TERPO UM616 KORER UN482 DEGEX UN490 BERAD UM142 INSUN UN34 EVRIN N34 BUNED 
    atismsg: 
    lt_atis: 
    logon: "20110813151905" 
    heading: "310" 
    qnh_ig: "29.79" 
    qnh_mb: "1008" 

좋은 것 그!

답변

1

추가 할 파일을 열어야합니다. w 모드로 파일을 열면 길이가 0으로 자르므로 루프의 반복마다 효과적으로 덮어 쓰게됩니다.

사용이 :

File.open("pilots.yml", "a") {|f| f.write(row.to_yaml) } 

더 좋은 프로그램에서를 통해 추가하는 대신 반복적으로 열고 닫을을위한 파일을 열어 둡니다. 트릭 감사를 밀 @Meagar했다 완벽

File.open("pilots.yml", "w") do |f| 
    CSV.foreach("vatsim-data.txt", :col_sep =>':', :row_sep =>:auto, :quote_char => ":") do |row| 
    # ... 

    f.write(row.to_yaml) 

    # ... 
    end 
end 
+0

: 그럼 당신은 아마 파일을 절단하고 싶을 것이다. 그리고 그렇게 쉽게 생각할 수 있습니다! –

관련 문제