ここから本文です

Cshellでファイルの内容を1行づつ配列に格納する方法を教えてください。 例)te...

ajua0724さん

2008/7/1611:41:36

Cshellでファイルの内容を1行づつ配列に格納する方法を教えてください。

例)temp.txtの内容を1行づつ配列に格納

以下temp.txtの内容
tanaka taro
yamada hanako
etc...

よろしくお願いします。

補足qwertyuio3456さん
試してみたのですが、それだと私の環境では空白区切りになってしまい

$TEST[1] = "tanaka"
$TEST[2] = "taro"
$TEST[3] = "yamada"
$TEST[4] = "hanako"

という状態で入ってしまいます。

私は

$TEST[1] = "tanaka taro"
$TEST[2] = "yamada hanako"

というふうにいれたいです。

出来ないのは環境の違いなんでしょうかね・・・
でも、ありがとうございました。

閲覧数:
22,350
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

編集あり2008/7/1618:25:54

#!/bin/csh
set TEST = ""
foreach aaaa (`cat temp.txt`)
@ I++
set TEST = (${TEST} `echo $aaaa`)
end
echo $TEST[1]
echo $TEST[2]
echo $TEST[3]

上記ではどうでしょうか。@ I++は不要ですが、これで行数が分かります。
なお、Cygwinの環境で検証しましたので、動作環境によっては動作が異なるかもしれません。
先頭行の#!/bin/cshはシェルがCシェルですよと宣言しています。
これで標準シェルがCシェル以外でもcsh シェルファイル名と入力しなくてもシェルファイル名だけで実行されます。

<補足回答>
以前、似たような質問での私の回答 http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1313556348 を流用したのですが、確認が漏れていました。
お詫び申し上げます。

代替案1
スペースを何かに変換して、配列に代入、取り出すときに再変換する。

#!/bin/csh
set TEST = ""
foreach aaaa (`sed -e 's/ /_/g' temp.txt`)
set TEST =(${TEST} `echo $aaaa`)
end

set I = 1
while ($I <= $#TEST)
set TEST1 = `echo $TEST[${I}] |sed -e 's/_/ /g'`
echo $TEST1
@ I ++
end

代替案2 文字列が単語2つで構成されている場合だけに有効です。

#!/bin/csh
set TEST = ""
foreach aaaa (`cat temp.txt`)
set TEST =(${TEST} `echo $aaaa`)
end

set I = 1
while ($I <= $#TEST)
@ II = $I + 1
echo $TEST[${I}] $TEST[${II}]
@ I = $I + 2
end

代替案1・2とも単語の間にスペースが2つ以上入っていても、1つになるようです。

質問した人からのコメント

2008/7/17 09:48:42

代替案1を使わせていただき、無事に出来ました。
取り出すときに再変換するなんて考え付きませんでした。
ありがとうございました。

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。