【VB.NET】DateTimeで取得した日時が和暦になってファイルが作成されてしまう
DateTimeが和暦を取得している?
エラーログのファイルを「ErrorLog_yyyyMMdd_HHmmss.txt」という形式で出力していたが、急に「ErrorLog_300427_HHmmss.txt」になってしまった。
どうやら2018が和暦の30に変換されたファイルが作成されているっぽい。
以下のようにして、現在日時を取得してファイルを作成している。
Dim dtNow As DateTime = DateTime.Now Dim stNow As String = dtNow.ToString("yyyyMMdd_HHmmss") errorLog = "ErrorLog_" & stNow & ".txt"
解決策
結論からいうとエクスプローラー側の問題。 「更新日時」の列が和暦で表示されているので、ここを西暦に直す。
スタートボタン(Windowsボタン) →コントロールパネル →時計、言語、および地域 →地域と言語 →形式タブ
日本だとyyyyにしているのに和暦で表示されているのは謎。 因みにドロップダウンでggとかを選択すると和暦になるのはわかるんだけど。
ん~しょうがないから形式の国のところを英語(米国)に変更して解決。
そしてこの後もう一度日本にしたら普通に西暦になってるし、ドロップダウンからggが無くなってる!! なんで????
あと、そもそもコントロールパネルなんか開いてないのになんで今まで西暦だった表示形式が和暦に変わったんだ?? Win7だから?
ん~よくわからん。
MacにNode.jsをダウンロードする際に「Warning: Failed to create the file ... curl: (23) Failed writing body (0 != 847)」というエラー
上記サイトを参考にしながらNode.jsをインストールする際にエラー。
$ nodebrew install-binary latest Fetching: https://nodejs.org/dist/v10.0.0/node-v10.0.0-darwin-x64.tar.gz Warning: Failed to create the file Warning: /Users/sane/.nodebrew/src/v10.0.0/node-v10.0.0-darwin-x64.tar.gz: No Warning: such file or directory curl: (23) Failed writing body (0 != 847) download failed: https://nodejs.org/dist/v10.0.0/node-v10.0.0-darwin-x64.tar.gz
ファイルが作れない?
$ mkdir -p ~/.nodebrew/src
ファイルを作ってあげて解決。
インストールの全コマンド。
$ brew install nodebrew $ nodebrew -v // インストールされたかチェック $ mkdir -p ~/.nodebrew/src // 上のエラーを回避 $ nodebrew install-binary latest // 最新版のnode.jsをインストール $ nodebrew list // インストールされているnode.jsを表示 $ nodebrew ls-remote // インストール可能なバージョンを表示 $ nodebrew install-binary 9.6.1 // バージョンを指定してインストールする $ nodebrew use v10.0.0 // 使用するバージョンを設定 $ echo 'export PATH=$PATH:/Users/sane/.nodebrew/current/bin' >> ~/.bashrc // saneのところは各自変更 $ node -v // これはターミナルを再起動した後に実行
【VBA】入力された文字列でフィルタをかける
シンプルだけど使いそうだからメモ。
以下のような場合、B1セルに入れられた材料名に対してフィルタをかけたい。
Sub make_filter() Dim str_target As String Dim int_target As Integer str_target = Range("B1").Value Selection.AutoFilter int_target = Cells.Find(What:=str_target).Column - 1 ActiveSheet.Range("$B$4:$E$9").AutoFilter Field:=int_target, Criteria1:="<>" End Sub
「〇」をフィルタリングする方法がわからなかったけど、マクロを記録すると「Criteria1:="<>"」で取れるっぽい。
いろいろなツールでAWSにSSH接続する(WinSCP、MySQL Workbench、CloudBerry)
仕事でAWSを使う際にいろいろとDB周りの接続やらが必要だったけど、
用語に対する理解も曖昧だった部分もあったし、
調べながらやったのでメモしておく。
AWSについての基礎はここを読んでおく。超わかりやすかった。
(下準備編)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで - Qiita
固定IPの取得・設定
インターリンクで取得し、以下のヘルプサイトを見ながら設定を行った。
Windows 10の設定 ■マイIP ソフトイーサー版■
固定IPアドレスは英語でFixed IP Addressなのか。
Staticではないのかな?
固定IPアドレス ‐ 通信用語の基礎知識
各プロトコルの違い
これも接続設定時にいろいろ出てきたが違いがわかっていないので調べた。
SCPとSFTPの違い | Skyarch Broadcasting
【3分で把握】ポート番号とは?と代表的なポート番号まとめ
TCPやUDPにおけるポート番号の一覧 - Wikipedia
AWS上で穴あけを行う
既にAWS上で動いているWebアプリケーションにアクセスしようにも、WinSCPやMySQL WorkbenchやCloudBerry経由でDBアクセスしようにもまずAWS上で穴あけを行わなくてはならない。つまりセキュリティグループのインバウンドルールに対して固定IPを設定していく。
「EC2 > セキュリティグループ > グループ選択 > インバウンド > 編集 > ルールの追加」で設定しようと思いきや、「送信元は CIDR ブロックまたはセキュリティグループ ID にする必要があります。」とのエラー文が。
→IPアドレスの後ろに「/32」をつけて解決!
参考:AWSのEC2のセキュリティのインバウンドのルールでIPを設定する場合は/32をつける - Qiita
・インバウンドルール:どんな通信が来たら許可するのか
・CIDRブロック:VPCが使用できるIPの範囲のこと(10.0.0.0/28(16IPアドレス) ~ 10.0.0.0/16(65,536IPアドレス)まで選択可能)。
PuTTY
ここからダウンロード。
基本的に下の参考にしたサイトの方法で出来たけど、どうやらPCを再起動した後に接続しなおす場合は、ppkファイルをpageant.exeに再度ドラック&ドロップして秘密鍵を登録しなおす必要がある。
・確認方法
Windowsの右下のインジケータ(バッテリーのアイコンの横などにある上矢印のアイコン)をクリック
→pageant.exeと同じアイコンを右クリック
→Views Keyをクリック
踏み台サーバを使ってサーバにアクセスする場合の設定方法は以下。
・カテゴリ > セッション > 接続先の指定
ホスト名 | 踏み台サーバーのElasticIP |
他はデフォルトでOK。
・カテゴリ > 接続 > SSH
サーバに送られるデータ | ssh 最終的な接続先のプライベートIP(ssh 170.20.20.20) |
他はデフォルトでOK。
参考:PuTTYでプライベートなAmazon Linuxサーバへ多段ログインしてみた | Developers.IO
Cloud Berry
ここからダウンロード。
左上の「File > New Amazon S3 Account」を押下。
名前表示 | 任意の表示名 |
Access key | AWS IAMでユーザを追加したときのアクセスキー |
Secret key | AWS IAMでユーザを追加したときのシークレットキー |
OKを押下。
タブに「My Computer →(名前表示で設定した表示名)」となっていることを確認。
あとは「Source:」を切り替えて表示する内容を自由に変更させる。
WinSCPで多段接続
ここからダウンロード。
・Session
Host name | 最終的な接続先のプライベートIP |
User name | ユーザー名 |
・Advanced...(Passwordの下) > Connection > Tunnel
Host name | 踏み台サーバーのElasticIP |
Port number | 22 |
User name | ユーザ名(Sessionと同じ) |
Private key file | 秘密鍵のファイル(.ppk) |
OKを押下し、初めの画面に遷移しSaveを押してLogin。
新しく接続させる場合は「New Session」タブを押す。
参考:AWSの仮想マシンにWinSCPでの接続 - ts0818のブログ
MySQL Workbench
ここからダウンロード。
MySQL Connectionsの右側の+アイコンを押す。
Connection Name | 任意の名前 |
・Connectionタブ
Connection Method | Standard TCP/IP overSSH |
・Parametersタブ
SSH Hostname | Elastic IP:22 (13.100.100.100:22) |
SSH Username | ユーザー名 |
SSH Password | - |
SSH Key File | 秘密鍵のファイル(.ppk) |
MySQL Hostname | ~~~.rds.amazonaws.com |
MySQL Server Port | 3306 |
Username | ユーザー名 |
「:22」を付けてなくて嵌った。
コマンドプロンプトからファイルを開くWindowsのstartコマンド(=Macのopenコマンド)
最近、Win10をシャットダウンせずに何日か使用していると、エクスプローラーなどを立ち上げたときにファイル名などが全て白色になってしまい表示できなくなる。
解決策としては再起動するしかわからないけれど、どうしても今ファイルを見たいって時がある。
けど、ファイル名は見れない。
ってことでコマンドプロンプトから開くしかないかなと思ってコマンドを調べた。
MacのopenのようなコマンドがWindowsでもある。
コマンドプロンプトで、
> start hoge.pdf > start /?
これで関連付けられたアプリケーションで開いてくれる。
「start /?」は要するにhelpだけど、Powershellでは効かなかった。
Windowsでファイル内の文字を検索する
エクスプローラーの検索窓だとひっかからないものがあったりするのでコマンドプロンプトを使う。
「foldername」以下で「HOGE」という文字を探しして出力結果を「findhoge.txt」に吐き出す場合。
> findstr /s /i "HOGE" foldername/* > findhoge.txt
コマンド | 説明 |
---|---|
/s | サブディレクトリを検索する |
/i | 検索文字列の大文字・小文字を区別しない(デフォルトは区別する) |
/x | 完全一致する文字のみ取得(デフォルトは部分一致) |
/n | 行番号を表示(デフォルトは非表示) |
参考:
Windowsでファイルから文字列検索するコマンド、findstr - Qiita
findstrコマンドで覚えておきたい使い方8個 | 俺的備忘録 〜なんかいろいろ〜
言語処理100本ノック with Python【第3章】
No | 日付 | 学んだこと |
---|---|---|
20 | 4/13 | json、gzip |
21 | 4/14 | 正規表現、re、raise |
22 | 4/16 | 正規表現 |
第3章: 正規表現
20. JSONデータの読み込み
Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ.
1行に1記事の情報がJSON形式で格納されるので、2章のように1行読み込んでifで判定させる。
解法
import gzip import json fname = 'jawiki-country.json.gz' with gzip.open(fname, 'rt', encoding="utf-8_sig") as jsonfile: for line in jsonfile: l = json.loads(line) if l['title'] == 'イギリス': print(l['text']) break
以下のように内包表記を使って書こうと思ったけどエラーが出てしまって無理だった。。
44行目を参考にifではなくwhileを使用してみた。
もしPythonの内包表記に終了条件が指定できたら · GitHub
result = [json.loads(line) for line in jsonfile while json.loads(line) != 'イギリス']
json
# 基本的な使い方 import json fname = open('sample.json') print (json.load(fname))
・ファイルの入出力(ファイル ⇔ Pythonオブジェクト)
load() | JSON形式のファイルを読み込んでPythonオブジェクトへ 読み込んだJSONファイルは辞書型で保存される |
dump() | PythonオブジェクトをJSON形式でファイルに書き込み こっちは文字列型で保存される |
・オブジェクトの変換(文字列 ⇔ Pythonオブジェクト)
loads() | JSON文字列からPythonオブジェクトへ変換(デコード) |
dumps() | PythonオブジェクトからJSON文字列へ変換(エンコード) |
gzip
gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)
'rt'はread + text
13.2. gzip — gzip ファイルのサポート — Python 3.6.5 ドキュメント
gzという拡張子は見慣れなかったけど圧縮形式の一つで「GNU zip」の略らしい。
gunzipコマンドで解凍可能。
21. カテゴリ名を含む行を抽出
記事中でカテゴリ名を宣言している行を抽出せよ.
素人の言語処理100本ノック:21 - Qiita
参考のQiita記事ではraiseを使った処理を書いているけどtry-exceptとの違いがわかってないのでメモる。
import gzip import json import re fname = 'jawiki-country.json.gz' def get_UK_article(): with gzip.open(fname, 'rt') as jsonfile: for line in jsonfile: line_json = json.loads(line) if line_json['title'] == 'イギリス': return line_json['text'] raise ValueError('Not Found Article.') # 正規表現のコンパイル pattern = re.compile(r'^(.*\[\[Category:.*\]\].*)$', re.MULTILINE + re.VERBOSE) # 抽出 result = pattern.findall(get_UK_article()) for line in result: print(line) # [[Category:イギリス|*]] # [[Category:英連邦王国|*]] # [[Category:G8加盟国]] # [[Category:欧州連合加盟国]] # [[Category:海洋国家]] # [[Category:君主国]] # [[Category:島国|くれいとふりてん]] # [[Category:1801年に設立された州・地域]]
正規表現
メタ文字 | 説明 | 使用例 |
---|---|---|
. | 任意の一文字 | a.c |
^ | 文字列の先頭 | ^abc |
$ | 文字列の末尾 | abc$ |
* | 0回以上の繰り返し | ab* |
+ | 1回以上の繰り返し | ab+ |
? | 0回または1回 | ab? |
.* | 任意の文字0文字以上 | |
.*? | 任意の文字0文字以上、非貪欲マッチ | 貪欲だと後半の"l"で始まる装飾を巻き込んでしまう |
re
raise
22. カテゴリ名の抽出
記事のカテゴリ名を(行単位ではなく名前で)抽出せよ.
import gzip import json import re fname = 'jawiki-country.json.gz' def get_UK_article(): with gzip.open(fname, 'rt', encoding="utf-8_sig") as jsonfile: for line in jsonfile: line_json = json.loads(line) if line_json['title'] == 'イギリス': return line_json['text'] raise ValueError('Not Found Article.') pattern = re.compile(r'^.*\[\[Category:(.*?)(?:\|.*)?\]\].*$', re.MULTILINE + re.VERBOSE) result = pattern.findall(get_UK_article()) for line in result: print(line) # イギリス # 英連邦王国 # G8加盟国 # 欧州連合加盟国 # 海洋国家 # 君主国 # 島国 # 1801年に設立された州・地域
23. セクション構造
記事中に含まれるセクション名とそのレベル(例えば"== セクション名 =="なら1)を表示せよ.
# 23 import gzip import json import re fname = 'jawiki-country.json.gz' def get_UK_article(): with gzip.open(fname, 'rt', encoding="utf-8_sig") as jsonfile: for line in jsonfile: line_json = json.loads(line) if line_json['title'] == 'イギリス': return line_json['text'] raise ValueError('Not Found Article.') pattern = re.compile(r'^(={2,})\s*(.+?)\s*\1.*$', re.MULTILINE + re.VERBOSE) # 抽出 result = pattern.findall(get_UK_article()) # 結果表示 for line in result: level = len(line[0]) - 1 print('{indent}{sect}({level})'.format( indent='\t' * (level - 1), sect=line[1], level=level)) # 国名(1) # 歴史(1) # 地理(1) # 気候(2) # 政治(1) # 外交と軍事(1) # 地方行政区分(1) # 主要都市(2) # : # :