2016-04-23 5 views
-1

私はこの変換を行っている間にbashを除いていくつかの理由からbashに変換します。C++をbashに変換するには、特定の変数にbashの意義があるかどうかを確認する必要があります。

変数(「サイズ」と呼ぶこともあります)がわかりませんが、変数名には何らかの重要性が示唆されています。ここでは、変数のすべてのインスタンスを考慮した簡略化されたコードがあります(ファイル内にはどこにも見つからないため、パッケージに関連していないと仮定しています)#include行には<>がありません。 #includeファイルには、この変数を逐語的に記述する必要はありません。このコードは、すべて40行のコード行と空白行の範囲内にあります。

for (i=0; blah; i++) { 
    int value[3]; 
    int size; 

    ..... 

    fscanf(inputfile_in, "%f, %f , %f\n", value, value[1], value[2], &size); 
    for (j=0; blah; j++); { 

     ..... 

     fprintf(outputfile_out, "%f, %f , %f\n", value, value[1], value[2], size); 

     ...... 
    } 

これだけです。私は値の配列を理解しています - 論理的には単純です&読み書きされる入出力ファイルの行は "[float#]、[float#]、[float#]"という形式です。

「サイズ」変数で失われています。それは重要だと思いますが、どこで使われているのか、なぜ必要なのか分かりません。

これはどういう意味ですか?どのようにそれが起こっているのbash同等物を思い付くために論理的にそれを解釈するために行く必要がありますか?またはそれはおかしいコードですか?あるいは、文字通り他の場所で言及されているにもかかわらず、C++の構造の中で、他のコードでは意味があります。

編集:複数の入力は、他のコメントを模倣しても、大変感謝しています。たとえば、「サイズ」が以下の1人の提案するような無関係/未使用の変数である場合、複数の人が同意するかどうかを知ることは非常に役に立ちます。私はなぜ、どのように私がこのプログラムを変更し、最終的に書き直すのかについての論理的根拠を構築しなければならない。 =)

+0

フォーマットは、引数の数と一致しない、と 'size'を示す' fscanf'呼び出しによって更新されない(またそれは 'fprintf'に使用されるであろう)。おそらくあなたの実際のプログラムは異なるでしょう。 –

+1

これは動作しているC++プログラムですか?猫がキーボードに乗っているようです。 – Scott

+0

@Thomas Dickeyだから、あなたが言っていることに基づいて、このサイズの変数には実際の機能がない可能性はありますか?このコードがちょうど最適以下に書かれたことは不可能ではありません。このコードは、var名以外は私のプログラムと同じように記述されています。また、.....の行は別の入力ファイルの操作です。技術的には、これらの操作は、関連するこの質問の入力ファイルに依存しません。 – neurocoder

答えて

0

浮動小数点配列[3] valuesといくつかの整数sizeがあります。あなたが提供したものから、sizeの重要性については、入力ファイルにvalue[3]の後に続く数字以外は何も書かれていない可能性があります。必要な場合でもそうでない場合でも、コードスニペットからは分かりません。

あなたはiループでそれらを読む前にjインデックス値を書き込むことができますので、あなたのコードスニペットはまた、2つの別々ループ、ないネストされたループでなければなりません。あなたのコードのその部分は単に意味をなさない。ファイルは、3-フロート以上のものが含まれていないと私は、各行にint型ならば、あなたにも行う可能性があります

を(多くはblahをすることになっているものに依存します):

$ cp inputfilename outputfilename 

があった場合size以下の各ライン上に複数の値があり、それは同等です:

:コンバージョンのために

$ awk -F',' '{printf "%.2f, %.2f, %.2f, %d\n", $1, $2, $3, $4}' input > output 

あなたはまだ投稿Cコードの同等のスクリプト形式に興味を持っていたならば、それは次のようになり

ifn="$1" ## input & output file name 
ofn="$2" 

declare -i size 
declare -a value 

while IFS=$',\n' read -r value[0], value[1], value[2], size; do 
    printf "%s, %s, %s, %d\n" ${value[@]} "$size" >> "$ofn" 
done < "$ifn" 

注意、あなたが新しい出力ファイルを毎回書きたいならば、あなたは出力ファイルを切り捨てる必要があります(例えば、 :> "$ofn")を使用してください。

0

フォーマット・マスクに基づいて、これらの文の両方から大きさを解消することができます

fscanf(inputfile_in, "%f, %f , %f\n", value, value[1], value[2], &size); 
    for (j=0; blah; j++); { 

     ..... 

     fprintf(outputfile_out, "%f, %f , %f\n", value, value[1], value[2], size); 

を、悪影響を与えることなく、

fscanf(inputfile_in, "%f, %f , %f\n", value, value[1], value[2]); 
    for (j=0; blah; j++); { 

     ..... 

     fprintf(outputfile_out, "%f, %f , %f\n", value, value[1], value[2]); 

になるはずです。

fprintffscanfの両方にformatマスクとそれに続くvarargsリストを指定します。

int fscanf(FILE * stream、const char * format、...);

従って書式マスク後の各パラメータの意味は、フォーマット・マスクに完全に依存しており、わずか3フォーマット指定があるので、&sizesizeは、おそらく以前の形式マスクから残留しています。彼らは確かにいずれの機能によっても使用されていません。

関連する問題