2次元配列のようなものについてどなたかご教授ください。
たとえば
1,2,3,4
a,b,c,d
という2行のテキストデータを読み込んで
(["1","2","3","4"], ["a","b","c","d"])
のようようなリストにはできたみたいなんですが
それをまたもとのカンマ区切りテキストにできなくて困ってます。
どこが間違ってるのでしょうか。よろしくお願いします。
open(READ,$filename) || &error("Read Error");
@BASE = <READ>;
close(READ);
@itemlist=();
foreach $num (0 .. $#BASE) {
$BASE[$num] =~ s/\n//g;
(@item) = split(/\,/,$BASE[$num]);
@itemlist = (@itemlist,[@item]);
}
#######
$dummy="";
foreach $num (0 .. $#itemlist) {
$renketu=join(",",$itemlist[$num]) ."\n";
$dummy.=$renketu;
}
open(WRITE,">$filename");
flock(WRITE,2);
print WRITE $dummy;
close(WRITE);
No.1ベストアンサー
- 回答日時:
@itemlist の各要素は「配列リファレンス」なので、それを文字列として join すると「ARRAY(0x177f124)」のような文字列が連結されてしまいます。
リファレンスからデータ実体を参照するには、リファレンスが入った変数の頭に変数プリフィクス($ @ % など)を付けるだけです。
例えば配列リファレンスが入った変数 $a から、実際の配列データを見るには
@$a
とします。
ただし、変数プリフィクスは演算子よりも先に評価されるので、$itemlist[$num] の場合は { } を使って
@{$itemlist[$num]}
とする必要があります。
つまり、連結部分は次のようにすれば大丈夫です。
$renketu = join(",", @{$itemlist[$num]}) ."\n";
あと、これは今回の質問と関係ありませんが、
foreach $num (0 .. $#配列名)
という使い方は、余計なメモリを消費するので
for (my $num = 0; $num <= $#配列名; $num++)
の方がいいです。
また、$num を要素の参照以外に使わないのなら、
foreach $alias (@配列名)
とすれば、$alias が $配列名[$num] の代わりになります。
($alias への更新は、配列要素にも反映されます。)
# 古いPerlではダメだったかも
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- UNIX・Linux 次の要件を満たすにはどのように修正したらよろしいでしょうか 1 2022/11/24 20:57
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- Excel(エクセル) VBA フォルダ見える化のコードについて 2 2023/06/19 15:04
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Strawberry Perl for Windows ...
-
Generic.List・ArrayList・配列...
-
DBIを使ってSelect文 複数のカ...
-
変数名(配列)の中の変数
-
ファイルからデータを読み込ん...
-
クラスに配列を渡す方法
-
csv形式のデータの一部を削除し...
-
エクセルVBAでTransposeの不思議
-
2次元配列の扱い
-
二次元配列のインデックスについて
-
チェックボックスのperlでの値...
-
Excel VBA ユーザーフォームの...
-
if文条件式で配列を使用したい
-
リストボックスに縦スクロール...
-
VBAでの一時停止と再開の方法
-
画面を強制的に再描画させる方法
-
Escキーを押すと、中断する時と...
-
プログラミングについて。 1つ...
-
VBA for i=1 to lastrow
-
フラグについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAのautofilter、criteriaの配...
-
二次元配列のインデックスについて
-
リストボックスに縦スクロール...
-
Excel VBA ユーザーフォームの...
-
マクロ Publicでの配列定義
-
エクセルVBAでTransposeの不思議
-
Strawberry Perl for Windows ...
-
二次元配列における要素数のは...
-
perlで2次元配列をサブルーチ...
-
クラスに配列を渡す方法
-
Dim flag(4) as boolean で配列...
-
文字の整列(printf)
-
perlで配列の要素が空なのを知...
-
jcode->jfold で禁則処理
-
VB6で配列の最大値を簡単に求め...
-
perl 配列の要素数について
-
ファイル名に日付・時刻を付与...
-
チェックボックスのperlでの値...
-
組み合わせについての質問です...
-
配列を初期化する時ってどうす...
おすすめ情報