2017-02-05 6 views
-1

私はいくつかのcsvファイルを持っていますが、問題は最初の行の後にコンマがないことです。最初の行の後にバッチ/ cmdまたはRでコンマを追加する方法を知っていますか?csvファイル、Rまたはバッチ/コンマにコンマを追加

だからあると:

VAR1、VAR2、VAR3、VAR4、VAR5

、B、C、D、E、

F、G、H、IをJ、

...

そして、私はそれ

したいと思います

VAR1、VAR2、VAR3、VAR4、VAR5、

、B、C、D、E、

F、G、H、I、J、

...

[最初の行はな長さとsynthaxに変更される可能性]すべて編集ソリューションは良いですが、私は唯一のバッチまたはRを使用することができます。私は、この問題が編集2であることを指定します0GBのファイルと私は結果をもたらす最も速い方法を探しています。

おかげ

答えて

0
@ECHO OFF 
SETLOCAL 
SET "sourcedir=U:\sourcedir" 
SET "destdir=U:\destdir" 
SET "filename1=%sourcedir%\q42057779.txt" 
SET "outfile=%destdir%\outfile.txt" 
SET first=y 
(
FOR /f "usebackqdelims=" %%a IN ("%filename1%") DO (
IF DEFINED first (ECHO %%a,) ELSE (ECHO %%a) 
SET "first=" 
) 
)>"%outfile%" 

GOTO :EOF 

あなたは、あなたの状況に合わせてsourcedirdestdirの設定を変更する必要があります。

テスト用にデータが入っているq42057779.txtという名前のファイルを使用しました。

設定された値にフラグfirst(値は無関係である)

入力ファイルの各ラインを読みます。フラグが定義されている場合は、端子番号,の行を出力します。それ以外の場合は、行を再現します。次にsetフラグをに設定しないでください。このように、ファイルは未定義であるため、ファイルの残りの部分は変更されずに再生されます。

+0

いいえ、私は自分のフォルダにある唯一のcsvのために自動化したいのですが(パスと名前の両方が可能です)バッチファイルを.cmdに保存したいのですがそれをダブルクリックするだけで、ファイルを置く場所は自動的にパスを検出してコマンドを実行します – Klapaucius

+0

問題は次のとおりです。今私がやっている: @ECHO OFF SETLOCAL SET "SOURCEDIR =%CD%" SET "DESTDIR =%CD%" SET "ファイル名1 =%SOURCEDIR%\ combinedFiles.csv" SET「outfileは=%DESTDIRを"%\ whatever.csv" SET first = y ( FOR/f "usebackqdelims =" %% IN( "%filename1%")DO( 最初に定義された場合(ECHO %% a)ELSE(ECHO %% "%outfile%" GOTO:EOF 入力のcsvが10GBに似ています。問題はwhatever.csvが空になったことです – Klapaucius

0

これにはいくつかの答え:

  1. フィールドを欠落ヘッダ行を有する幾分問題があります。ほとんどのユーティリティーは、(a)ヘッダー行がすべての列を持つか、(b)ヘッダー行がないと仮定します。このファイルを作成しているものはどれも "修正済み"であるべきですが、それは別の議論です。

  2. 元のファイルを元のままにして、データを読み込むときにこれを修正できます。

    cn <- read.csv("file2.csv", nrows = 1, header = FALSE, stringsAsFactors = FALSE) 
    dat <- read.csv("file2.csv", skip = 1, header = FALSE) 
    colnames(dat)[seq_along(cn)] <- cn 
    dat 
    # var1 var2 var3 var4 var5 NA 
    # 1 a b c d e NA 
    # 2 f g h i j NA 
    

    この手順は、このコードをロードするたびに実行する必要があります。この方法を使用する利点は、ファイルが大きく、余分なファイル(サイズまたは数)が必要ない場合に効果的です。この症状を証明していないファイルに対しては、それでもなお問題はありません。

  3. ファイルを修正することができます。

    x <- readLines("file.csv") 
    x[1] <- paste0(x[1], ",") 
    writeLines(x, "file2.csv") 
    read.csv("file2.csv") 
    # var1 var2 var3 var4 var5 X 
    # 1 a b c d e NA 
    # 2 f g h i j NA 
    

    これは、ファイル全体をメモリに読み込むという欠点があります。おそらくファイルサイズによっては問題はありませんが、少し非効率です。利点は、いったん "固定"されると、 "間違った"ファイルを途中で移動し、 "正しい"ファイルのみを処理できることです。

ソリューション2と3の両方で、目的の列名を割り当てる必要があります。各行の最後にだけ,を追加

+0

ありがとうございます。 R – Klapaucius

1

Rワンライナーで行うことができます

cat(paste(readLines("input.csv"), ",", sep = ""), file = "output.csv", sep = "\n") 

を説明:

  • readLinesは要素として(あなたのinput.csvファイルの各行を読み込みます文字ベクトルの)
  • paste(..., ",", sep = "")各行にカンマを追加します。
  • cat(..., file = "output.csv", sep = "\n")は、新しいoutput.csvファイルに行を書き込みます(Windowsでは、行末の文字列"\n"を調整する必要があります)。
+0

ありがとうございました。 R – Klapaucius

+0

と良い解決策はupvoteおよび/または答えを受け入れること自由に感じる! – setempler

+0

私はupvoted;残念ながらそれらは表示されません – Klapaucius

関連する問題