HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2018
1002
そらそらcsvの部分取得を行いたい3解決


そらそら

リンク

2018/10/2(Tue) 17:56:07|NO.85490

はじめまして。
現在、csvを取得して、データを利用しているのですが、
その取得したcsvのデータの一部だけを使いたいのです。

現在のコードとしては、notegetでcsvを取得し、splitで「,」で区切り全てを変数に格納していますが、
csv列が数百行に渡って記載してあるため、
splitで列の全てを変数に格納していると、時間がかかってしまいます。
時間短縮のためにcsvの,の位置を指定して取得を行いたいです。

取得すべき列は、一番後ろの列と、その一つ手前の列なのですが、
そう言った一部のみを取得する方法はありませんでしょうか?

noteget csv
split csv,“,“,dust,dust,dust,dust,dust••••••,dust,data1,data2

使わない列は、現在dust という変数を作成し、上書きしてメモリ削減をしています。
これのdataの部分だけを変数に格納する方法があればご教授お願いします。



この記事に返信する


あらや

リンク

2018/10/2(Tue) 19:08:39|NO.85491

モジュールで新規命令を作るとかはすれば別ですが
splitのように、なんらかの命令1つでは解決できないかと思います。

すこし長いですがgetstrを使った方法です。

dust = ""; // 一時格納用 data1 = ""; // 最後の手前の列データ用 data2 = ""; // 最後の列データ用 idx = 0; // インデックス repeat getstr dust, csv, idx, ','; idx += strsize; if( strsize > 0 ) { // 末尾でなければそれぞれのデータを格納 data1 = data2; data2 = dust; } else { // 末尾まで行ったらループを抜ける break; } loop mes data1; mes data2;

今回は最後とその手前のデータということでしたが、
これを応用すれば〇番目の列のデータだけを抜き出すなども可能です。



さか

リンク

2018/10/2(Tue) 21:27:56|NO.85493

csvの専用命令があるのでその方が速いですかね。csvstr とか。
でも数百行くらいのsplitでは一瞬だと思うのですが。
違う処理で時間がかかってないでしょうか。
以下のソース、自分のPCではcsvstrが9秒くらい、splitが20秒くらいでした。


#include "hspda.as" csv="a,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d,b,c,d" sdim aa,99,99 repeat 10000000 ;split csv,",", aa csvstr aa,csv loop mes "end"



そらそら

リンク

2018/10/3(Wed) 14:04:03|NO.85497

あらやさん
別の手段を使っての取得方法の教授ありがとうございます。
カンマで区切ることばかり考えていたので、
カンマごとにインデックスサイズを取得して
そのサイズを元にデータを保持するという手段は想像にありませんでした。
しかし、この手段でもdustにデータを繰り返し代入することになってしまい、
結果として時間の大幅短縮には繋がりませんでしたが、手法の勉強としては
有意義な意見でした。ありがとうございます。

さかさん
csv専用命令があるとのことでしたので、使わせてもらおうとおもいます。
また、違う処理で時間がかかっていないかということで調べたところ、
ループ内に不要なジャンプ命令が紛れており、ループのたびにそのジャンプ命令を実行して
いたため、多くの時間を要していました。
ジャンプ命令をループから外すことで、処理の高速化を行うことができました。

お二方、非常に勉強になりました。
ありがとうございました。



ONION software Copyright 1997-2018(c) All rights reserved.