新規記事の投稿を行うことで、非表示にすることが可能です。
2020年05月04日
季節外れの梅
季節外れの梅
季節外れなのは梅ではなく、
私のブログだ
変な世の中になってしまったので、
いつもと心の状態が違うし、
行動がおかしくなる
幸いなのは田舎に住んでいたこと
買い物以外は人には会わない
いつも花見を家族で出かけるのだが、
今年はそんな環境ではない
気晴らしにウォーキングと言うことで、
近くの山に咲く梅を見に行く
ここなら人気はないだろうと
しかし、
私と同じ考えの人は居たようだ
世の中とはこう言うもの
私だけは、
あり得ない
ここも予測通り
梅まつりは中止である
しかし道案内の人は
数名立っていた
7〜8割の人は自粛しても、
2〜3割の人は
やはり出向くのだ
天気の悪いせいもあるが、
梅に生気がない
全てが
暗い
これは3月1日のできごとである
※画像をクリックすると拡大表示します
タグ:梅
【このカテゴリーの最新記事】
2020年04月17日
写真データファイルに付く番号について_その2
写真に付けられている名前に
日付と時刻を自動的に付加するスクリプトを作成する
スクリプトを作ってふり直してみた
元のファイル名は「DSC_0171.JPG」だが、
ブログにアップロードしてみると、
タイトルは「20200306_1048_DSC_0171.JPG」
となっている
しかしブログ文面に写真を貼り付けてみると、
ファイル名は
「E2808E2020E2808E03E2808E06_1048_DSC_0171.JPG」
となってしまった
実際のブログのテキストは、
<div style="text-align: center;"><a href="/dragonfl/file/undefined
/E2808E2020E2808E03E2808E06_1048_DSC_0171.JPG" target="_blank"><mg src="/dragonfl/file/undefined
/E2808E2020E2808E03E2808E06_1048_DSC_0171-thumbnail2.JPG" alt="20200306_1048_DSC_0171.JPG"
border="0"></a></div>
このテキストに対しファイル名一覧から名前を
順番に置き換え、
ブログの写真添付文章を作っている
こんな名前になってしまったら、
スクリプトが動かせない
あくまでもファイル名は、
「20200306_1048_DSC_0171.JPG」なのだから
これは今の文字体系UTF-8に関係すると考えた
最近の文字体系は複雑すぎる
それこそ昔は文字を1バイトで表現していた
1バイトとは8ビットで成り立つ
1ビットとはスイッチ1個と考えればよい
オンとオフで判断する
オンが1でオフがゼロだ
それを8個並べると、11111111
2進数で計算すると、
2^8=256だから256文字を表現できる
この中には数字と記号とアルファベットと
カナ文字が入っている
いや入っているのではなく、
単なる約束である
コードが「0x30」だったらゼロ「0」だよ
だから「0」と言うイメージを表示してね
と言うことだ
0xとは16進表示と言うこと
16進表示とは、一桁で0123456789ABCDEF
まで表すことができる
あくまでも一桁なので10以上はABCDEFとなる
1バイト文字の時は複数のコード表が用意されていて、
コード表を切り替えて
グラフィック文字や罫線を表現した
もっと古い話をすれば、
4ビットで数字を表していた
これを、デジットと呼ぶ
0000、全部オンで、1111
2進数だから値で表すと、
1+2+4+8で15、一桁で表すとFになる
私がコンピュータを始めた頃は、
この1バイトのコード体系ををEBCDIC、
(Extended Binary Coded Decimal Interchange Code、
エバックディック、拡張二進化十進コード)と呼んでいた
のちにASCII(American Standard Code for Information Interchange)
が現れ、
漢字を表すためにシフトJIS(Shift_JIS)なるものができた
半角文字と呼ばれるものは1バイトで表現できるが、
漢字は数が多いため1バイトでは表現しきれず、
2バイトが必要になった
2バイトでコードを表現すると、
2^16=65、536個の文字を管理することができる
この2バイト文字を全角文字と呼ぶ
しかしこの頃はまだグローバル化があまり進んでおらず、
企業内のシステムなどが主流であったため、
他国のことなど考える必要もなかった
きちんとしたルールも決められておらず、
半角以外のその国独自の文字などは
自由に空いているコード表の中に埋め込まれてしまった
インターネットなどが普及してくると、
他国で作られた文章などに文字化けが起きてきた
統一されていないのだから当然のことである
例えば、日本では漢字を割りふっている場所に、
中国ではそこに中国語が割り振られてくる
だからパソコンを立ち上げる時に、
言語国の指定が必要になってくる
そこで登場したのが、
Unicodeと呼ばれるもので、
これは文字コードの国際的な業界標準の一つで、
世界中の様々な言語の文字を収録し通し番号を割り当て、
同じコード体系のもとで文字を使用できるように
したものだ
しかし一長一短でそのまま使われることもなく、
例のごとくいろいろなものが派生してくる
その中で今一般的に使われているのがUTF-8
と言う規格で、
ASCIIと同じ部分は1バイトで文字を表現し、
そのほかの部分を2〜4バイトで表現する
可変長の符号化方式と呼ばれるものだ
話がそれてきているけれど、
そういう流れで文字に対する処理が
複雑になってきている
目に見える文字で中のコードを
判別できなくなってきている
また昔のことになってしまうが、
昔は半角全角が目で判断できたものが、
今では判別できない
ごちゃまぜである
コードと文字が1:1で表されていたものが、
今では1:nとなってきている
表に現れている文字の後ろに何があるのかが解からない
16進と言う言葉もあまり見かけなくなった
前出の「20200306_1048_DSC_0171.JPG」が
ブログにアップすると
「E2808E2020E2808E03E2808E06_1048_DSC_0171.JPG」
と言う名前になったのはなぜか
スクリプトが返してきた文字は、
「?2020/?03/?06 ??10:48」であって、
16進で表記すると、
「0x3F323032302F3F30332F3F3036203F3F31303A3438」
である
今まで文字コードがどうのこうと言って来たし、
それで時間を大分つぶしてしまったが、
どうも文字コードが原因ではなさそうだ
ネットで「E2808」を調べて見るが、
サーバー側の文字変換で出現してきているようだ
たぶんサーバー側はPHPなどで作られていると思うから、
これ以上はもう私には解からない
しかし、スクリプトから返される日付情報に
余計なコードがあるのは見て明らかである
文字表示である「?」をコードで見ると「0x3F」が
どうも悪さをしている
ならば取ってしまおう
と言うことで
スクリプトではこの「0x3F」を除くことにする
出来上がったスクリプトで名前を置き換え
ブログにアップロードする
文字化けも起こらず
タイトルとファイル名も一致した
スクリプトがなぜ'0x3F'を付加して来たかは
未だ不明である
ファイル名に日付時刻を付加するスクリプトは
以下通り
'======================================================
'フォルダ単位の名前の変更を行う、但しJPG及びGIFを対象とす
'既存のファイル名の先頭に撮影日付と時刻を追加する
'形式は、yyyymmdd-hhmm_既存名.JPGとする <---hhmmが3桁の場合があるので頭ゼロで4桁固定とする 20190520
'
'対象フォルダにこのスクリプトを配置し、スクリプトを実行する
'拡張子は大文字で統一する 2018.07.20
'======================================================
'
'フォルダ名にスペース等が入っているとエラーになる
'MsgBoxは1バイト文字で最大約1024文字までしか表示出来ない
'
Option Explicit
Const cFiExt = "jpggif" '拡張子JPGとGIFを対象とする
dim FS
dim WShell
dim xMyPath
dim xLen
set FS=CreateObject("Scripting.FileSystemObject")
set WShell=CreateObject("Shell.Application")
'スクリプトのフォルダ名を取得
xMyPath=Replace(WScript.ScriptFullName, WScript.ScriptName, vbNullString)
if right(xMyPath,1)="\" then '右端が"\"の場合この"\"を削除
xLen=Len(xMyPath)
xMyPath=left(xMyPath,(xLen-1))
end if
FileRenameProc(xMyPath)
set FS = Nothing
set WShell=Nothing
'--------------------------------------------------
' ファイル名の変更
'--------------------------------------------------
Function FileRenameProc(pSourceFolder)
dim objFolder,objFiles,objFi,Fi
dim Arr,Arr2,xx,tmp,NewName,LL
dim xLen,Ix
dim getymdhm
dim NewName2
dim objWSFolder
dim xOneChr
dim xDate
dim xTime
dim xHH
dim xMM
Set objFolder = FS.GetFolder(pSourceFolder)
Set objFiles = objFolder.Files
Set objWSFolder=WShell.Namespace(pSourceFolder)
tmp = ""
For Each Fi in objFiles
Arr =Split(Fi.Name,".")
xx = LCase(Arr(1)) 'アルファベットの大文字を小文字に変換
LL = UCase(Arr(1)) 'アルファベットの小文字を大文字に変換
If InStr(cFiExt,xx) > 0 Then
set objFi = FS.GetFile(Fi)
'NewName=Arr(0) & "b" & "." & LL '拡張子は大文字で統一
'GetDetailsOFはWSHのメソッド、12は撮影日時のパラメータ
getymdhm=objWSFolder.GetDetailsOF(objWSFolder.ParseName(Fi.name),12)
'PutInClipboardText getymdhm
'余計な文字"&3F"が入っているので削除
NewName2=""
for Ix=1 to len(getymdhm)
xOneChr=mid(getymdhm,Ix,1)
if Hex(Asc(xOneChr)) <> "3F" then
NewName2=NewName2 + xOneChr
end if
next
Arr2 =Split(NewName2," ")
xDate=Arr2(0)
xTime=Arr2(1)
xDate=Replace(xDate,"/","") '日付の/を外す
xTime=Replace(xTime,":","") '時刻の:を外す
xTime=Right("0"&xTime,4)
NewName2=xDate & "_" & xTime '日付と時刻の間のスペースを_に変更->"-"はエラーになる
Ix=Instr(1,Arr(0),NewName2)
If Ix = 0 Then '
NewName=NewName2 & "_" & Arr(0) & "." & LL '拡張子は大文字で統一
tmp = tmp & Fi.name & "->" & NewName & vbCrLf
objFi.Name = NewName
Else '変更済み若しくは撮影日付がない
tmp = tmp & Fi.name & "->" & " no change" & vbCrLf
End If
End If
Next
MsgBox tmp '表示文字数制限あり
set objFi = Nothing
Set objFiles = Nothing
Set objFolder = Nothing
End Function
'クリップボードに出力
Public Sub PutInClipboardText(ByVal str)
Dim cmd
cmd = "cmd /c ""echo " & str & "| clip"""
CreateObject("WScript.Shell").Run cmd, 0
End Sub
これで写真の管理が楽になった
仕事を離れるとWindowsにこだわる必要がなくなる
何を作ろうかのアイデアも出なくなる
ボケ〜としていたところ、
新しいアイテムを見つけた
Pythonと言う言語
今までBASICが基本だと思っていたが、
人気言語を検索してもBASICが出てこない
今はPythonらしい
Pythonを調べていたらUnixが出てきて、
RaspberryPiなるものに興味が出てきた
今、RaspberryPiにはまってる
今度RaspberryPiについてのブログでも書こうかと
案を練っているところだ
※画像をクリックすると拡大表示します
タグ:スクリプト