新しく発言する EXIT インデックスへ
txtファイルを読み込む方法

  txtファイルを読み込む方法 超初心者です 2003/05/20 00:26:13 
  せん越ながら。 小塚 2003/05/20 02:44:44 
  │└こんな夜遅くにありがとうございます。本当... 超初心者です 2003/05/20 03:11:02 
  │ └一行を一つの文字列変数として読めたのなら... 青木太一 2003/05/20 05:56:31 
  │  └青木さん、ありがとうございます。 超初心者です 2003/05/20 23:07:53 
  数値がどういう形式で書いてあるかが重要で... 白石和夫 2003/05/20 08:28:52 
  │└11列1024列じゃなくて11列1024行かな。 白石和夫 2003/05/20 08:36:12 
  │ └お返事ありがとうございます。 超初心者です 2003/05/20 18:02:27 
  │  └数値と数値の間のスペース(空白文字)は常... 白石和夫 2003/05/20 20:18:19 
  │   └もし,数値と数値の間の空白文字が1個と決ま... 白石和夫 2003/05/20 20:32:30 
  │    └掲示板上では空白に見えても実際はTAB文字の... 白石和夫 2003/05/20 21:00:16 
  │     └ありがとうございます。さっそく実行してみ... 超初心者です 2003/05/20 23:04:24 
  │      └すみません。上の文章では列ごとにスタート... 超初心者です 2003/05/20 23:10:47 
  │       └お邪魔虫です ひよ 2003/05/21 10:09:21 
  こんな感じで如何でしょう ひよ 2003/05/21 10:50:44 

  txtファイルを読み込む方法 超初心者です 2003/05/20 00:26:13  ツリーへ

txtファイルを読み込む方法 返事を書く
超初心者です 2003/05/20 00:26:13
数値が11列×1024行あるtxtファイルの各数値をそれぞれ読みこんでいく方法がわかりません。ほんとに初心者すぎてなさけない質問だと思うのですが、どうか教えていただけませんか??よろしくお願いします。

  せん越ながら。 小塚 2003/05/20 02:44:44  ツリーへ

Re: txtファイルを読み込む方法 返事を書く
小塚 2003/05/20 02:44:44
せん越ながら。
テキストファイルの場合は、数値であっても、テキストとして捕らえると思います。従って、ワードパット機能がない場合は、11*1024がテキストをオーバーしていると読み込み不可だと私は思いますが。

  │└こんな夜遅くにありがとうございます。本当... 超初心者です 2003/05/20 03:11:02  ツリーへ

Re: せん越ながら。 返事を書く
超初心者です 2003/05/20 03:11:02
こんな夜遅くにありがとうございます。本当に何もわからない状態でやってみたんですが、1行を1つの文字列変数としては読み込めたのですが、それしかできませんでした。何か他の方法を考えてみます。小塚様、ほんとうにありがとうございました。

  │ └一行を一つの文字列変数として読めたのなら... 青木太一 2003/05/20 05:56:31  ツリーへ

Re: こんな夜遅くにありがとうございます。本当... 返事を書く
青木太一 2003/05/20 05:56:31
一行を一つの文字列変数として読めたのなら、
文字列関数を使えば分解、数値化できますよ。

元々の11列×1024行の形式によっては、もっと簡単に読めそうな気
もしますが。

-----以下プログラム
!数字の最後に","が来る場合
LET str$="12345, 23.5 , .7e-6,90,"
print str$
do
LET comma_position=POS(str$,",")!POS関数で","が最初に現れる位置を取得
if comma_position=0 then exit do!","がないのなら、ループ終了
LET v=val(str$(0:comma_position-1))!文字列の先頭から","直前までを数値化
LET str$=str$(comma_position+1:len(str$))!文字列str$の","直後から最後尾までを改めてstr$と定義しなおす。
print v
loop

END

  │  └青木さん、ありがとうございます。 超初心者です 2003/05/20 23:07:53  ツリーへ

Re: 一行を一つの文字列変数として読めたのなら... 返事を書く
超初心者です 2003/05/20 23:07:53
青木さん、ありがとうございます。
本当に丁寧に教えていただいて感動しました。
試してみます。

  数値がどういう形式で書いてあるかが重要で... 白石和夫 2003/05/20 08:28:52  ツリーへ

Re: txtファイルを読み込む方法 返事を書く
白石和夫 2003/05/20 08:28:52
数値がどういう形式で書いてあるかが重要です。コンマで区切って書いてあるのか,スペースで区切って書いてあるのか,桁位置がそろっているのか否かなどです。数値テキストの最初の数行だけででもアップしてください。

また,どういう風に読みたいのかも情報として必要です。
FOR I=1 TO 1024
READ #1: a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12
NEXT I
のような形で順番に読みたいのですか。それとも,11行1024列の配列に一度に読みたいのですか?



  │└11列1024列じゃなくて11列1024行かな。 白石和夫 2003/05/20 08:36:12  ツリーへ

Re: 数値がどういう形式で書いてあるかが重要で... 返事を書く
白石和夫 2003/05/20 08:36:12
11列1024列じゃなくて11列1024行かな。
あらかじめテキストを加工しておけば
DIM a(1024,11)
MAT READ #1:a
みたいな感じで(繰り返しを用いないで)一気に読むことも可能です。

  │ └お返事ありがとうございます。 超初心者です 2003/05/20 18:02:27  ツリーへ

Re: 11列1024列じゃなくて11列1024行かな。 返事を書く
超初心者です 2003/05/20 18:02:27
お返事ありがとうございます。
textファイルの形式なんですが、名前は拡張子に.datがついています。最初のほうの並びは

0 600 60 60 60 60 60 60 60 60 60 60
1 645 65 65 64 64 64 65 64 64 65 65
2 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0
4 0 0 0 0 0 0 0 0 0 0 0
5 0 0 0 0 0 0 0 0 0 0 0

という感じで1024行続いています。このようなファイルが500個くらいあって、同じ場所の数値を全ファイルについて足し合わせたいのですけども、簡単にできるのでしょうか??

  │  └数値と数値の間のスペース(空白文字)は常... 白石和夫 2003/05/20 20:18:19  ツリーへ

Re: お返事ありがとうございます。 返事を書く
白石和夫 2003/05/20 20:18:19
数値と数値の間のスペース(空白文字)は常に1個なのでしょうか?
それとも,桁位置が縦にそろっていて,n個目の数値が始まる位置は何桁めというように固定されているのでしょうか?
また,左端にある数値も対象に含まれるのですか?


  │   └もし,数値と数値の間の空白文字が1個と決ま... 白石和夫 2003/05/20 20:32:30  ツリーへ

Re: 数値と数値の間のスペース(空白文字)は常... 返事を書く
白石和夫 2003/05/20 20:32:30
もし,数値と数値の間の空白文字が1個と決まっているのなら,青木太一さんのやり方を少し修正すれば数値の分離ができるでしょう。
また,桁位置が定まっているのなら,数値に変換するための文字列の切り出しはもっと簡単です。
この掲示板は2個以上続く空白が1個に詰められてしまうので,くわしく調べて書き込んでください。

なお,500個ものファイルのデータを加算するのは簡単ではないと思いますが,常識的には,11×1024の2次元配列を1個用意して,そこに各ファイルから読み出した数値を加算していくことになると思います。

  │    └掲示板上では空白に見えても実際はTAB文字の... 白石和夫 2003/05/20 21:00:16  ツリーへ

Re: もし,数値と数値の間の空白文字が1個と決ま... 返事を書く
白石和夫 2003/05/20 21:00:16
掲示板上では空白に見えても実際はTAB文字の可能性もあるので,
OPEN #1:〜〜〜〜
FOR n=1 TO 1024
LINE INPUT #1: s$
FOR i=1 TO LEN(s$)
PRINT ORD(s$(i:i));
NEXT i
PRINT
NEXT n
CLOSE #1
を実行して読もうとしているファイルの構造を調べてください。
なお,数字の文字コードは48〜57,空白文字の文字コードは32です。TABの文字コードは9です。

  │     └ありがとうございます。さっそく実行してみ... 超初心者です 2003/05/20 23:04:24  ツリーへ

Re: 掲示板上では空白に見えても実際はTAB文字の... 返事を書く
超初心者です 2003/05/20 23:04:24
ありがとうございます。さっそく実行してみました。空白は文字コード9でした。TABなんですか??実際のデータは下のように数字のスタート位置が列ごとにそろえてあるみたいでした。

0 600 60 60 60 60 60 60 60 60 60 60
1 645 65 65 64 64 64 65 64 64 65 65
2 0 0 0 0 0 0 0 0 0 0 0

  │      └すみません。上の文章では列ごとにスタート... 超初心者です 2003/05/20 23:10:47  ツリーへ

Re: ありがとうございます。さっそく実行してみ... 返事を書く
超初心者です 2003/05/20 23:10:47
すみません。上の文章では列ごとにスタート位置がそろってませんが、実際は列ごとに同じ所から数字が並べてあります。

  │       └お邪魔虫です ひよ 2003/05/21 10:09:21  ツリーへ

Re: すみません。上の文章では列ごとにスタート... 返事を書く
ひよ 2003/05/21 10:09:21
お邪魔虫です
突然ですが、しゃしゃり出ます(興味のある話題です)
処理は次のような流れになるかと思います。
※データが記録された総数≒500のファイル名称を記録したファイルを作る
このファイルは、各行毎に
データの記録されたファイル名

|約五百行続きます

データの記録されたファイル名
これは、十進BASICではなく、コマンドプロンプトのDir をリダイレクトすれば
良いので、とりあえず省略します。
-------------------全数値を後でも利用するとき----------
1.数値を記憶する配列を宣言して、ゼロクリアー
Dim Nodata(501,1024,11)の後、ゼロクリア
501---->1〜500に各ファイルの数値を記録、501にTotalを記録
1024--->行数
11----->一行データ数
*
現在の処理ファイルの番号(Nof)=0とする
ここから繰り返し(全記録ファイル数繰り返し)
|名称記録ファイルから一行読む、読めなかったらループ終了
--|処理ファイル番号をひとつ増やす(Nof=Nof+1)
--|読めた文字をファイル名として、DataFile input-open
--|現在の処理行数(NoLi)=0とする
--|ここから繰り返し
----|記録ファイルから一行読む(NoLi=1024に達するか、Eofになったらループ終了)
----|現在の処理行数(NoLi)をひとつ増やす
----|Tabで区切られた今の一行を、Nodata(Nof,Noli,*)に格納
----|トータルの計算Nodata(501,Noli,*)に↑を加える
--|ここまで繰り返し
--|今読み込んだファイルをクローズ
|繰り返し終了
|好みにより、
|データ一覧 Nodata(1〜500,*,*)
|結果の一覧 Nodata(501,*,*) を書き出す

-------------------全数値を後で利用しないとき----------
Dim Nodata(1024,11)として、ゼロクリア
各ファイル毎に読み込みその都度totalして行けばよろしいと思います

と言う感じで如何でしょう。 ひよ

  こんな感じで如何でしょう ひよ 2003/05/21 10:50:44  ツリーへ

Re: txtファイルを読み込む方法 返事を書く
ひよ 2003/05/21 10:50:44
こんな感じで如何でしょう
一行ごとに読み込んで、数値に分け表示します。
-------適当にインデントしてください
dim nodata(100) !一行100data迄
print "TAB区切りデータファイルを指定して下さい"
FILE GETNAME DF$,"*.*"
open #1 : name DF$ ,access input
do
line input #1 , if missing then exit do : dummy$
print dummy$
LET n=0
do
if dummy$="" then exit do !end of line data
if 99<n then exit do !data over 100
LET itab=pos(dummy$,chr$(9))
LET n=n+1
if itab=0 then
LET nodata(n)=val(dummy$)
LET dummy$=""
else
LET nodata(n)=val(dummy$(1:itab-1))
LET dummy$=dummy$(itab+1:len(dummy$))
end if
loop
for i=1 to n
print using "##### ":i;
print nodata(i)
next i
print
loop
close #1
END


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。