Hatena::Groupnadesiko

雪乃☆雫のなでしこ日和

2019/01/21 (月)

CSV取得!

| 19:14 | CSV取得! - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - CSV取得! - 雪乃☆雫のなでしこ日和 CSV取得! - 雪乃☆雫のなでしこ日和 のブックマークコメント

 マイナビ連載41目は、閏年の計算でした。

 コレは、前にバイオリズムを作った時にやったね☆

 https://news.mynavi.jp/article/nadeshiko-41/

 あー・・・ワタシは常に、こんなカンジですよ~。いきなりプログラムに出来る能力が無いでね(´・ω・`)


 してして、ふと気が付いたら、なでしこ3がバージョンアップしてましたよ~☆

v3.0.53
・『関数』から始まる変数が定義できない問題を修正 #341
・『DOMイベント処理停止』(preventDefault)を追加。(#326)
・範囲コメントの中に改行あるとソースコードが正しく実行できない問題(#345)
・DOMイベント「~時」に、「の」の助詞を追加 (#340)
・関数JS関数実行』を追加 (#327)
・『ブラウザ移動』と『ブラウザ戻る』を追加。(#313)
・CSV取得, TSV取得, 表CSV変換, 表TSV変換追加

 おぉ、CSV取得ですよ!(喜)

 これで、自前の関数をいちいちくっつけなくても良くなるね♪

 ・・・と思ったらエラーになりました。

 どうも、v1非互換のようです。  ※2019/3/13追記 v3.0.55で修正されました!

 わたしの使用上で一番問題が発生するのは、最後の列がの行があった場合に、「,」が入っていると、次の行とくっついちゃうんですね。

データ=「いろは,にほへ,と
ちりぬ,るを,
わかよ,たれ,つねならむ」
データを言う

データ=データをCSV取得。
データを表CSV変換して言う

データが元に戻らずに、

いろは,にほへ,と
ちりぬ,るを,わかよ,たれ,つねならむ

 となっちゃう。

データ=「いろは,にほへ,と
ちりぬ,るを
わかよ,たれ,つねならむ」
データを言う

データ=データをCSV取得。
データを表CSV変換して言う

 「を」の後の「,」が無ければ元に戻るので、こういう仕様である、列数の多いデータの場合に改行を挟んでも1行と出来るようになってるのであるいうことなのかも知れない

 しかし、エクセルで作って、CSV形式で保存すると、このようなデータの場合、もれなく末尾に「,」が入って出力されてきちゃうので困ったもんだというところ(´・ω・`)


 とりあえず、CSV取得する前に、「,{改行}」を改行置換してやれば良いかなと思ったら、これまたうまくいかなかった。

 いや、簡易エディタ上では、うまくいきました。改行は、LFみたい。

 「GET送信した時」とかで、ファイルから取得する場合は、改行CRLF、CRLFのどれなのかを確認して置換してやらないとダメらしい。「,{CHR(13)}{CHR(10)}」を改行置換で出来ました。

 あるいは、ファイルの改行コードをLFとして保存するべきなのか。


の列が続く行では、「,」が複数個くっついてくるから、「,*{改行}」を改行正規表現置換、の方が良さそう

クジラ飛行机クジラ飛行机2019/01/26 20:40CSV取得の問題、修正しました!
https://github.com/kujirahand/nadesiko3/issues/353

ご報告に感謝です(^v^)y

雪乃☆雫雪乃☆雫2019/01/27 16:28なななんかスミマセン><
ご対応ありがとうございます!!!(≧▽≦)

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20190121

2019/01/17 (木)

九星の取得のナゾ

| 14:16 | 九星の取得のナゾ - 雪乃☆雫のなでしこ日和 を含むブックマーク はてなブックマーク - 九星の取得のナゾ - 雪乃☆雫のなでしこ日和 九星の取得のナゾ - 雪乃☆雫のなでしこ日和 のブックマークコメント

 マイナビ連載40目は、迷路ゲームでした。

https://news.mynavi.jp/article/nadeshiko-40/

 ゲームですよ! やった~☆

 コレを発展させると、ド○クエが作れますよ♪

 して、タイムリーに正月中、Ⅲ、Ⅰ、Ⅱとやって、はⅤをやってるワタシです(爆)

 やっぱゲームは、こうゆうのでいいんだよね~。

 3Dでリアルタイムに戦うとかムリヽ(;´Д`)ノ



 しかしは、ゲームとはマッタク関係なく、年前にやってたカレンダーに、度は九星を表示したいとゆう話し。

 歴註に二黒とか九紫とか書いているアレですね。

 例によってウィキペディアさまに教えてもらうと、年の九星は簡単でした。

年家九星=11-西暦年%9
もし、年家九星≧10ならば、
  年家九星=年家九星-1

 コレで算出出来るようです。

 しかし、日は……?

 どうも、なかなかフクザツです。

https://ja.wikipedia.org/wiki/%E4%B9%9D%E6%98%9F#%E6%97%A5%E3%81%AE%E4%B9%9D%E6%98%9F

 ゆってることがよく分からん(´д`;

 しかも、この教えのとうりにやってみたところ、どうもカレンダーと合いません。まあ、所詮占いなので、流派によって若干異なるラシイんですが。

http://d.hatena.ne.jp/nobml/20121231

 ここのがとても分かりやすくてうまくいきました☆

 この記事はの後改訂されているのですが、改訂後の計算方法というのがウィキペディアさまのに書いてあるのと同様で、ウチのカレンダーとは合わないんです。(今年言うタブン11/23の切替日から合わなくなる)

 我が家のカレンダーが時代遅れなのか……?Σ(゜д゜;

 別なカレンダーも見てみたい……

#-----------------------------------------------------------------------
#  九星取得
# https://ja.wikipedia.org/wiki/%E4%B9%9D%E6%98%9F
# http://d.hatena.ne.jp/nobml/20121231
#-----------------------------------------------------------------------
●(日付を|日付の|日付で)日家九星取得
  九星=「一白水星,二黒土星,三碧木星,四緑木星,五黄土星,六白金星,七赤金星,八白土星,九紫火星」を「,」で区切る。
  データ=配列。 #修正ユリウス日,干支,切替日,開始九星
  日付U=日付の修正ユリウス日取得。
  日付を「/」で区切る。
  西暦年=それ[0]

  6
    C=回数-1。年=西暦年+(INT(C/2)-1)。
    データ[C]=配列。
    もし、C%2=0ならば、
      二至=「夏至」。データ[C][3]=8。
    違えば、
      二至=「冬至」。データ[C][3]=0。
    ここまで。
   # 日家九星を求めたい日を含む年、およびの前年・翌年の夏至と冬至の修正ユリウス日と干支(No)を求める。
    データ[C][0]=年の二至を二十四節気日付取得して、それ修正ユリウス日取得。
    データ[C][1]=(それ+50)%60。
   # 陽遁・陰遁の切替日の日付を求める。
    もし、データ[C][1]≦28ならば、
      データ[C][2]=データ[C][0]-データ[C][1]。
    違えばもし、データ[C][1]≧32ならば、
      データ[C][2]=データ[C][0]+(60-データ[C][1])。
    違えば、
      データ[C][2]=データ[C][0]+(30-データ[C][1])。
      もし、二至=「夏至」ならば、データ[C][3]=2。
      違えば、データ[C][3]=6。
      # 閏が連続した場合の調整
      もし、C>0ならば、
       もし、データ[C][2]-データ[C-1][2]=210でなければ、
        データ[C-1][2]=データ[C-1][2]-30。
        もし、二至=「夏至」ならば、データ[C-1][3]=0。
        違えば、データ[C-1][3]=8。
       ここまで。
      ここまで。
    ここまで。
  ここまで。
  # 見逃された閏の調整。
  4
    C=回数。
    もし、データ[C][2]-データ[C-1][2]=240ならば、
      データ[C][2]=データ[C][2]-30。
      もし、C%2=1ならば、データ[C][3]=6。
      違えば、データ[C][3]=2。
    ここまで。
  ここまで。

  # 求める日付の切替日。
  もし、日付U≧データ[3][2]ならば、
    切替日=データ[3][2]。開始九星=データ[3][3]。陰陽=1。
  違えばもし、日付U<データ[2][2]ならば、
    切替日=データ[1][2]。開始九星=データ[1][3]。陰陽=1。
  違えば、
    切替日=データ[2][2]。開始九星=データ[2][3]。陰陽=0。
  ここまで。

  # 求める。
  もし、陰陽=1ならば、
    九星[(日付U-切替日+開始九星)%9]で戻る。
  違えば、
    もし、開始九星-(日付U-切替日)%9<0ならば、九星[開始九星-(日付U-切替日)%9+9]で戻る
    違えば、九星[開始九星-(日付U-切替日)%9]で戻る。
  ここまで。
ここまで。
#-----------------------------------------------------------------------
●(日付を|日付の|日付で)日家九星取得_改
  九星=「一白水星,二黒土星,三碧木星,四緑木星,五黄土星,六白金星,七赤金星,八白土星,九紫火星」を「,」で区切る。
  データ=配列。 #修正ユリウス日,干支,切替日,開始九星
  日付U=日付の修正ユリウス日取得。
  日付を「/」で区切る。
  西暦年=それ[0]

  6
    C=回数-1。年=西暦年+(INT(C/2)-1)。
    もし、C%2=0ならば、二至=「夏至」
    違えば、二至=「冬至」
    データ[C]=配列。
   # 日家九星を求めたい日を含む年、およびの前年・翌年の夏至と冬至の修正ユリウス日と干支(No)を求める。
    データ[C][0]=年の二至を二十四節気日付取得して、それ修正ユリウス日取得。
    データ[C][1]=(それ+50)%60。
   # 陽遁・陰遁の切替日の日付を求める。
    もし、データ[C][1]≦28ならば、データ[C][2]=データ[C][0]-データ[C][1]。
    違えば、データ[C][2]=データ[C][0]+(60-データ[C][1])。
  ここまで。
  # 閏を置くかどうかを判断する。
  4
    C=回数。
    もし、データ[C][2]-データ[C-1][2]=240ならば、
      データ[C][2]=データ[C][2]-30。
      もし、C%2=1ならば、データ[C][3]=6。
      違えば、データ[C][3]=2。
    違えば、
      もし、C%2=1ならば、データ[C][3]=0。
      違えば、データ[C][3]=8。
    ここまで。
  ここまで。

  # 求める日付の切替日。
  もし、日付U≧データ[3][2]ならば、
    切替日=データ[3][2]。開始九星=データ[3][3]。陰陽=1。
  違えばもし、日付U<データ[2][2]ならば、
    切替日=データ[1][2]。開始九星=データ[1][3]。陰陽=1。
  違えば、
    切替日=データ[2][2]。開始九星=データ[2][3]。陰陽=0。
  ここまで。

  # 求める。
  もし、陰陽=1ならば、
    九星[(日付U-切替日+開始九星)%9]で戻る。
  違えば、
    もし、開始九星-(日付U-切替日)%9<0ならば、九星[開始九星-(日付U-切替日)%9+9]で戻る
    違えば、九星[開始九星-(日付U-切替日)%9]で戻る。
  ここまで。
ここまで。
#-----------------------------------------------------------------------
●(日付を|日付の|日付で)年家九星取得
  九星=「一白水星,二黒土星,三碧木星,四緑木星,五黄土星,六白金星,七赤金星,八白土星,九紫火星」を「,」で区切る。
  日付を「/」で区切る
  西暦年=それ[0]
  立春=西暦年の「立春」を二十四節気日付取得。
  もし、(日付をUNIXTIME変換)<(立春をUNIXTIME変換)ならば、西暦年=西暦年-1。
  数=11-西暦年%9-1。
  もし、数≧9ならば、数=数-9。
  九星[数]で戻る
ここまで。
#-----------------------------------------------------------------------
#和時計の時は月/日のみ返したが、年/月/日を返すよう変更している。
●(年のSを|Sで)二十四節気日付取得
  節気=["小寒","大寒","立春","雨水","啓蟄","春分","清明","穀雨","立夏","小満","芒種","夏至","小暑","大暑","立秋","処暑","白露","秋分","寒露","霜降","立冬","小雪","大雪","冬至"]
  データ=[{"D":6.3811,"A":0.242778},{"D":21.1046,"A":0.242765},{"D":4.8693,"A":0.242713},{"D":19.7062,"A":0.242627},{"D":6.3968,"A":0.242512},{"D":21.4471,"A":0.242377},{"D":5.6280,"A":0.242231},{"D":20.9375,"A":0.242083},{"D":6.3771,"A":0.241945},{"D":21.9300,"A":0.241825},{"D":6.5733,"A":0.241731},{"D":22.2747,"A":0.241669},{"D":8.0091,"A":0.241642},{"D":23.7317,"A":0.241654},{"D":8.4102,"A":0.241703},{"D":24.0125,"A":0.241786},{"D":8.5186,"A":0.241898},{"D":23.8896,"A":0.242032},{"D":9.1414,"A":0.242179},{"D":24.2487,"A":0.242328},{"D":8.2396,"A":0.242469},{"D":23.1189,"A":0.242592},{"D":7.9152,"A":0.242689},{"D":22.6587,"A":0.242752}]。
  年を「/」で区切る。
  年=それ[0]
  数=節気からSを配列検索。
  もし、数<4ならばY=年-1。
  違えばY=年。
  月=((数/2)を切捨)+1。
  日=データ[数]["D"]とデータ[数]["A"]でYの節気計算。
  「{年}/{月}/{日}」で戻るここまで。

●(DとAでYの)節気計算
  INT(D+(A*(Y-1900))-INT((Y-1900)/4))
ここまで。
#-----------------------------------------------------------------------
●(日付を|日付の|日付で)修正ユリウス日取得
  日付を「/」で区切る
  y=それ[0]。m=それ[1]。d=それ[2]。
  もし、(m=1)または(m=2)ならば、
    y=y-1。m=m+12。
  ここまで。
  (INT(365.25*y))+INT(y/400)-INT(y/100)+INT(30.59*(m-2))+d-678912で戻るここまで。
#-----------------------------------------------------------------------

#以下はテスト
日付=「2019/12/31」
日付の年家九星取得して表示。
日付の日家九星取得して表示。
日付の日家九星取得_改して表示

https://nadesi.com/doc3/index.php?%E3%81%AA%E3%81%A7%E3%81%97%E3%81%933%E7%B0%A1%E6%98%93%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF

 簡易エディタでお試し出来ます。

 (改のついてるほうが参考にしたサイトの改訂版の計算方法という意味で、付いてない方が、うちにあるカレンダーと合う方です。)

トラックバック - http://nadesiko.g.hatena.ne.jp/snowdrops89/20190117