• ベストアンサー

固定長ファイルを配列に!

5行まで違うデータが入っていて 6行目から 347.44 14832 616 4.15 といったようなデータになっています。 この数値だけを配列に入れようと思うんですが どうすればよいでしょうか? ちなみに・・・ 1行ずつ文字列として配列に入れて 6行目に当たる配列から substrを使ってそれぞれ分けようと思ったのですが 小数点がない真ん中の二つのデータが うまくとれないんです。 わかる方よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

$test = split(" +", $table[13]); でどうでしょうか。 あとは、fgets でバイト数指定して 読み込むとか。

ichirafe
質問者

お礼

すばらしい!+をつけるだけでした。 完璧です。ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

回答No.1

こんにちは。 split関数で分割したらどうでしょう。

ichirafe
質問者

補足

その方法も試しては見たんですが $test = split(" ", $table[13]); という風に設定して 334.51 3734 264 7.08 これをprint_rで出力すると・・・ Array ( [0] => 334.51 [1] => [2] => [3] => 3734 [4] => [5] => [6] => [7] => [8] => [9] => 264 [10] => [11] => [12] => [13] => [14] => [15] => [16] => [17] => 7.08 ) と、なってしまいます。 ちなみに 347.44 14832 616 4.15 と書きましたが、書き込んだときにスペースが勝手に消されてしまってます。 正確には数字の先頭が10文字おきになってる固定長のデータです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 外部ファイルから読み込んだデータを配列変換したい!

    Japanese 72 99 40 Math 88 48 32 English 13 77 96 というデータファイル(test.dat)があります。数字は省略しましたが各200ずつ計600で、データ数はJapanese・Math・Englishの行含め全部で603です。上から順に出席番号1番2番・・・となりますので200人分の成績データということになります。 これら数値データを用いて各教科ごとの平均点を出したり、成績順に並べ替えたりしたいのです。 そのためにこのデータファイルの数値の部分だけ配列にしたいのですが、外部のファイル、しかも数値と文字が混じったデータを配列に変換するにはどうすればよいでしょうか。 [00],[01],[02]・・・・・・・・(以下200人分) [10],[11],[12]・・・・・・・・ [20],[21],[22]・・・・・・・・ というのをイメージしているのですが(列は出席番号・行は各教科)、他に良いアイデアはありますでしょうか。 申し訳ありませんが、ご教授願います。

    • ベストアンサー
    • Java
  • エクセルでそれぞれ1000倍して合計する配列?式はありますか?

    No.652904 「質問:エクセルは少数点以下の計算が苦手? 」でわかったことから、小数の計算(合計)を小数ではなくして行おうと思います。 A1セルからA20セルに入力された数値(小数または整数)をそれぞれ1000倍してA21セルに出したいのです。 それぞれに1000倍する作業列を作って合計すればできるのはわかりますが、できれば作業列なしでやりたいのです。 多分「配列計算」だと思うのですが、「配列」は今までやったことがないのでわかりません。 どのような計算式になるのでしょうか?

  • ファイルから読み込んで配列へ

    PerlでCGIスクリプト(掲示板もどき)を作成しています。 配列の操作がうまくいかず、ご教授頂きたいと思います。 <やりたい事> 1.ブラウザ上のフォームからの入力を、カンマ区切りでテキストファイルに追記して保存。 2.そのテキストの一部を使ってHTMLで表を作る。 <実際の作業> 1.フォームからのデータはcgi-lib.plで連想配列として受け取り、unshiftでテキストファイルへ追記する。 &ReadParse; #フォームからデータを受け取る $o=$in{'name'}; $p=$in{'mail'}; $q=$in{'title'}; $r=$in{'comment'}; open(IN,"xxx.txt"); @tmp1=<IN>; close(IN); #1件1行として新規データを追加する unshift (@tmp1,"$oo" , "," , "$pp" , "," , "$qq" , "," , "$rr","\n"); open(OUT,">xxx.txt"); print OUT @tmp1; close(OUT); 2.xxx.txtのデータを読み込んで、1列目(name)と3列目(title)だけを使った表を作る。 データを読み込む時点でつまづき、先に進めません。 <テキストファイルの例> 1行目:a,b,c,d 2行目:e,f,g,h 3行目:i,j,k,l 以下同様 <症状> print @tmp1;とすると、a~lの全てのデータが表示される。 $tmp1[0];とすると、(a)のみ表示される。 $tmp1[1];とすると、カンマ(,)が表示される。 $tmp1[2];とすると、(b)が表示される。 <質問> 一つの行(配列)に対して2回繰り返す処理(nameとtitle)と、行単位で繰り返す処理(1行目、2行目…)を合わせればいいのだろうと思っていますが、どうすればいいのかわかりません。 気分的には↓こんな感じです。 foreach { "行の処理" foreach { "列の処理" } } そもそも、区切り文字であるカンマが、配列に格納されている時点で失敗しているのかな?とも思っています。 宜しくお願いします。 なお、不足している情報がありましたら補足いたします。

    • ベストアンサー
    • Perl
  • 数値の抽出方法がわからず困っています

    テキストデータの処理がうまくいかず困っています。 ----------------------------------------------- a:0.001 b:-11.111 c:50.5 d:-12.345 ----------------------------------------------- といった文字列から ----------------------------------------------- 0.001 -11.111 50.5 -12.345 ----------------------------------------------- といった形で符号や小数点を含めて抽出したいのですが どのようにするのが良いのでしょうか。 各値は、それぞれの値がスペースによって区切られています。 また、各値は数値の大きさがそれぞれ異なり桁数が一定ではありません。 split や substr を用いてやろうとしているのですが、 なかなか思ったとおりの形で出力できません…

  • 配列を連想配列に

    $data=file(file); こちらで20行程度のデータを受け取り配列に入れたとして、、 $data[数字]ではなく $data[配列内のデータの最初の5文字]こちらをキーとして利用することは出来ませんか?? そうすれば条件にあった配列を検索かけて 必要なデータを取り出しやすくなるのですが。 配列の最初の5文字を取り出しキーとして使用する方法お願いします!!

    • ベストアンサー
    • PHP
  • 配列の並び替え

    下のように5つの配列がA~E列まであって、2、3行目にデータが入っています。このときに、2行目の値が3行目の値より小さい配列で、かつ、2行目の値が小さい順に並べる。その後に、3行目より、2行目の値の方が大きい配列を3行目の値が大きい順に並べるマクロコードを教えてください。   A B C D E←列      1  1 2 3 4 5←配列番号 2  4 9 8 6 2 3  1 5 7 10 3      ↑ 行    ↓     A B C D E 1  5 4 3 2 1 2  2 6 8 9 4 3  3 10 7 5 1

  • 文字列の配列

    文字列の配列 1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4 のようにIPアドレスが一行に一つづつ書き込まれたテキストがあります。 ここから、それぞれのIPアドレスを文字列として配列に書き込みたいのですが、どうしたらよいのでしょうか。 IPアドレスの数だけ配列を始めに宣言して、それぞれに書き込んでいくのでは手間がかかりすぎてしまいます。 単純に数値の羅列なら scanfを使い、配列に格納できるのですが、文字列になるとどうしたらいいのかわかりません。 よろしくお願いいたします。

  • PHPでfile()を使った際の配列の要素について

    PHPのfile関数の動作について質問させて頂きます。 テキストファイルからfile()を使って配列に各行のデータを取り込んだのですが、その配列から特定の要素を探そうとしたところ、検出できませんでした。 テキスト.txtの内容------- AAA BBB CCC --------------- $array = file("テキスト.txt"); $word = "AAA"; $keys = array_keys($array,$word); var_dump($keys); 簡略化しましたが、こんな感じで実行するとAAAが格納されているはずの[0]番目のkeyは検出されません。 bar_dumpを使って$array[0]と$wordを確認してみたところ、以下のようなデータが帰ってきました。 $array[0] → string(5) "AAA" $word → string(3) "AAA" まったく同じ文字列なのに、配列の方の長さが2ほど大きくなっています。 そこでtrimを使用してみたところ、配列からこの謎の2バイト?のデータが削除できました。 検索も正しく動作するようになりました。 文末に改行が入ってるのかとも思ったのですが、\nを削除する処理では検索が出来なかったので、不思議に思っております。 テキストファイルから取り込んだ際に、文字列の前か後ろに何らかの文字が入っているのだと思うのですが、実際どのような文字が入っているのでしょうか? ---------------------------------- それともう一つお聞きしたいのですが、 テキストファイル内容がある程度長い(100行以上、または1万文字以上など)場合、file()で配列にデータを取り込むのは負荷が大きかったりするのでしょうか? fgetsで1行ずつ取り出して比較する方法も考えたのですが、処理の繰り返しと取り込むデータの大きさのどちらに配慮するべきか悩んでいます。 もし100行や1万文字が多い・少ないという感覚になる場合、実際「配列にするには大きすぎる」という感覚はどれくらいの容量から考えるべきでしょうか? 後半の質問につきましては明確な答えで無くても、「自分はこう感じる」というような感覚的なご意見でもお聞きしたいと思っています。 お手数をおかけしますが、どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 配列オーバーフロー?

    文字列を(順番を変えて)コピーして表示させるプログラムを 作っていますが、うまく表示されずに困っています。 具体的にお話しますと・・・ 「abc・・・xyz」→「zyx・・・cba」等としたり、色々 文字列の順序を変えた内容を表示するのでこの部分は問題ないと思ってます。 こうしたプログラムで文字列のchar配列を200程度にして、 1行あたり50文字程度で数行程度ならちゃんと表示されるのですが これを数十行で行うと部分的に化けるところが出てきます。 わかる人にアドバイスを貰ったところ配列オーバーフローではないか? と言われましたがそれ以上の情報は得られず、 何が問題なのがよくわからず困っております。 ・文字列は一文字ずつ配列を用いている ・文字のコピーはstrcpyを用いている →for(i=0,j=0;i<MAX;i++) strcpy(&moji[i],&mojimoji[i]); ・strncpyを用いると「フ」というのが交じってくるので使っていない ・初期化はこんな感じで行っている →for(i=0;i<MAX;i++) strcpy(&moji[i],"\0"); 何よりよくわからないのが、同じような内容の行でも 化ける行と化けない行があり、化けるというのはその行にない文字が 入ってきてしまうというものです。

  • コンマで区切られた、数値と文字列を含むファイルの入出力(C言語)

    C言語に関する質問があります。 数値と文字列を含む外部ファイルを読み込みたいのですが、方法が分かりません。もし良いアイディアを思いついた方、頭の良い方はぜひ回答よろしくお願いします。 外部ファイルは、以下のデータを1セットとして、この1セットのデータが改行されて、何千行もあるファイルです。 1セットのデータは41個の属性からなり、コンマで区切られています。 文字列のデータと、数値データ(連続値)からなります。 0,tcp,smtp,SF,829,327,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,8,113,0.88,0.25,0.12,0.02,0.00,0.00,0.00,0.00 ↓ 0,udp,private,SF,105,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0.00,0.00,0.00,0.00,1.00,0.00,0.00,255,253,0.99,0.01,0.00,0.00,0.00,0.00,0.00,0.00 ↓ . . . のように時系列データとなっています。 配列data[41]を用意し、41個のデータを data[0] = 0 data[1] = tcp data[2] = smtp data[3] = SF data[4] = 829 . . . のように配列に入れたいと考えています。 *配列に格納されているデータを計算で使うため、配列を使いたいと考え  ています。 上記の方法が可能か分かりませんが・・・ 当方まったくの初心者で困っています。よろしくお願いします。