웹 스토어에 표시되도록 CSV 파일 행이 변경되었습니다.

웹 스토어에 표시되도록 CSV 파일 행이 변경되었습니다.

다음과 같은 항목이 포함된 CSV 파일이 있습니다.

"";"";"";"";"Park2";"Lamella Koivu Natur Loc 5 3-sauvainen 14x188x2266mm. 3,41m2/PKT.";"PKT";"2";"100,0000";"-596,7500";"1";"0";"Lamella Koivu Natur Loc

- Ruotsalainen, laadukas
- 5G Lukkoponttiparketti, taitettava/painettava
- Helppo asentaa
- 3-sauvainen, mattalakattu
- Lauta 14x188x2266mm
- 3,41m2/pkt, 102,3m2/lava

29,33€/M2";""

내가 필요한 것은 다음과 같이 출력됩니다.

"";"";"";"";"Park2";"Lamella Koivu Natur Loc 5 3-sauvainen 14x188x2266mm. 3,41m2/PKT.";"PKT";"2";"100,0000";"-596,7500";"1";"0";"Lamella Koivu Natur Loc<br>
<br>
- Ruotsalainen, laadukas<br>
- 5G Lukkoponttiparketti, taitettava/painettava<br>
- Helppo asentaa<br>
- 3-sauvainen, mattalakattu<br>
- Lauta 14x188x2266mm<br>
- 3,41m2/pkt, 102,3m2/lava<br>
<br>
29,33€/M2";""

아니면 작동할 수도 있지만 이렇지는 않습니다. br 수동으로 추가하는 것을 테스트했는데 작동했습니다. 온라인 상점의 제품 설명을 변경하고 싶습니다. 이제는 이 작업을 수행하지 않으며 가져오기 중에 행 변경 사항이 삭제됩니다(joomla cms의 가져오기 구성 요소).

쉘 스크립트의 .txt 파일에서 csv 파일을 만들고 있습니다.

답변1

$ csvsql -H -d ';' --query "SELECT a,b,c,d,e,f,g,h,i,j,k,l,REPLACE(m, char(10), '<br>'||char(10)),n FROM data" data.csv

이는 다음을 사용합니다.csvkitCSV 파일을 데이터베이스 테이블로 취급하고 모든 열( a이름은 to n, 총 14개의 익명 열)을 선택합니다. char(10)열 13( )의 리터럴 개행 문자( )를 뒤에 오는 개행 문자 m로 바꿉니다 .<br>

결과:

,,,,Park2,"Lamella Koivu Natur Loc 5 3-sauvainen 14x188x2266mm. 3,41m2/PKT.",PKT,2,1000000,-5967500,1,0,"Lamella Koivu Natur Loc<br>
<br>
- Ruotsalainen, laadukas<br>
- 5G Lukkoponttiparketti, taitettava/painettava<br>
- Helppo asentaa<br>
- 3-sauvainen, mattalakattu<br>
- Lauta 14x188x2266mm<br>
- 3,41m2/pkt, 102,3m2/lava<br>
<br>
29,33€/M2",

;출력에 -delimiter를 포함시키 려면 결과를 다음으로 전달하십시오 csvformat.

$ csvsql -H -d ';' --query "SELECT a,b,c,d,e,f,g,h,i,j,k,l,REPLACE(m, char(10), '<br>'||char(10)),n FROM data" data.csv | csvformat -D ';'
;;;;Park2;Lamella Koivu Natur Loc 5 3-sauvainen 14x188x2266mm. 3,41m2/PKT.;PKT;2;1000000;-5967500;1;0;"Lamella Koivu Natur Loc<br>
<br>
- Ruotsalainen, laadukas<br>
- 5G Lukkoponttiparketti, taitettava/painettava<br>
- Helppo asentaa<br>
- 3-sauvainen, mattalakattu<br>
- Lauta 14x188x2266mm<br>
- 3,41m2/pkt, 102,3m2/lava<br>
<br>
29,33€/M2";

답변2

perl -0pe 's/("[^"]*")(?=[;\n])/ $1 =~ s!\n!<br>\n!gr /gse' ex.csv
  • perl -0pe...입력을 빨아들여 최종적으로 결과를 인쇄합니다.
  • s/("[^"]*")(?=[;\n])/ action-perl /ge...모든 문자열을 다음의 결과로 바꿉니다.
  • $1 =~ s!\n!<br>\n!gr개행 문자를 다음으로 바꾸십시오.<br>\n

답변3

gawk어디에 사용하세요RS(레코드 구분 기호)는 정규 표현식일 수 있습니다..

BEGIN {
    RS="\"\n"
}
{
    gsub("\n","<br>\n")
    print
}

"이는 줄 끝의 a가 레코드의 끝이라고 가정 하지만 패턴은 필드 시작 부분의 개행 문자와도 일치할 수 있습니다. 이런 일이 발생하면 <br>거기에는 아무것도 삽입되지 않습니다.

다른 버전에서는 awk이 기능을 지원하지 않을 수 있습니다. ~에서awk사양:

RS에 여러 문자가 포함되어 있으면 결과가 지정되지 않습니다.

답변4

저는 Ruby와 Ruby 모듈을 좋아합니다.

ruby -e '
  require "csv"
  options = {:col_sep => ";", :force_quotes => true}
  new_csv = CSV.generate(options) {|csv|
    CSV.foreach(ARGV.shift, options) {|row|
      row[-2].gsub!(/\n/, "<br>\n")
      csv << row
    }
  }
  puts new_csv
' file.csv

관련 정보