【vbs】ファイル、フォルダ関係の関数
ファイル関係のオブジェクトを定義する
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
ファイルを開く
Set objFile = objFSO.OpenTextFile("ファイルパス")
ファイルの存在するフォルダのパス名を返す
folderPath = objFSO.getParentFolderName("ファイルパス")
【php】同ページ$_POST使用時の再送信対策
formをPOSTで送信後、ページをリロードするとform再送信の確認メッセージがでる問題。
メッセージを出さないため&再送信を防ぐための方法を考える。
formを送信
↓
POSTを受け取ったら$_SESSIONに格納。同ページに移動。
↓
$_SESSIONを使って処理。処理後に破棄する。
という方法をとる。
session_start(); //セッション開始
これを<html>前に設置して、後は処理していく。
VBSの配列
宣言
Dim ary()
要素数は1以上の整数でのみ指定可能。変数などはエラーになる。
〇Dim ary(10)
×Dim ary(num)
動的配列
一度宣言した配列を宣言し直す.
ReDim aryString(20)
こうすると配列の要素は全て空になる.
ReDim Preserve aryString(20)
Preserveを付けると元の要素は保持される.
配列内検索
Filter(aryString, str, , )
・aryString ⇒ 対象の配列
・str ⇒ 検索文字
・⇒ 検索文字を含むものが対象ならTrue, 含まないものが対象ならFlase. デフォはTrue
・⇒比較方法.バイナリなら0, テキストなら1. デフォは0
fetchに関する覚書
fetchを使って分かったこと。
・thenメソッド内でグローバル関数に代入してもブロック外からスコープ出来ない。
・ブロック外のfunctionへの引数にも指定できない。
・fetchで取得した自体をグローバル関数に代入することは可能。
基本は
fetch(filePath)
でPromiseという形式のオブジェクトを取得する。
そのまま " .then(res => res.json()) "と続ければファイルのテキストをjsonとしてオブジェクトを取得できる。
.json()を.text()にすればテキストとして返してくれる。
thenメソッドはfetchでファイル取得後実行される。ただし取得成功かは問わない。
catchメソッドはエラーが起きたら実行される。ネットワークエラーのみ?
参考:
JavaScriptのFetch APIを利用してリクエストを送信する(https://sbfl.net/blog/2017/01/29/fetch-api/)
CSVファイルを変換出力する(Worksheetを介さない)
Sub CSVconvert() '////////////////////////////// 'csvをworksheetを介さず変換する 'VBSで十分できる '////////////////////////////// Dim fso As Object, inf, outf, aLine, field, wk '取り込むファイルをダイアログで選択、キャンセルで中断 FileN = Application.GetOpenFilename("CSVファイル,*.csv") If FileN = False Then Exit Sub FilecnvName = Left(Dir(FileN), Len(Dir(FileN)) - 4) & "cnv.csv" Set fso = CreateObject("Scripting.FileSystemObject") Set inf = fso.OpenTextFile(FileN, 1) Set outf = fso.OpenTextFile(ThisWorkbook.Path & "\" & FilecnvName, 2, True) Do Until inf.AtEndOfStream aLine = inf.ReadLine ' 'セグメント内改行対策箇所 ' Do Until EOF(1) ' If (Len(strBuf) - Len(Replace(strBuf, """", ""))) Mod 2 = 0 Then Exit Do ' Line Input #1, strBuf1 ' strBuf = strBuf & strBuf1 ' Loop ' '引用符削除 aLine = Replace(aLine, """,", ",") aLine = Replace(aLine, ",""", ",") aLine = Replace(aLine, """""", """") If Left(aLine, 1) = """" Then aLine = Right(aLine, Len(aLine) - 1) If Right(aLine, 1) = """" Then aLine = Left(aLine, Len(aLine) - 1) 'カンマで分割 field = Split(aLine, ",") '//////////////////////////////
'処理エリア
'↓並び替えの例
'wk = field(0)
'field(0) = field(1)
'field(1) = field(2)
'field(2) = wk
'////////////////////////////// headed: '配列をカンマを挟んで結合 aLine = Join(field, ",") 'outfに書き込み outf.WriteLine (aLine) continue: Loop 'ファイルを閉じる inf.Close outf.Close End Sub
Scripting.FileSystemObjectでファイルAをファイルBに変換して出力する。
【WScript.Arguments】ドラッグ&ドロップしたtxtファイルの中身を配列に格納する
Dim GetPath
Set GetPath = WScript.Arguments
'ドラッグ&ドロップされていなければ中断
If GetPath.Count = 0 Then
MsgBox "ファイルをドラッグ&ドロップしてください。",,"警告"
Wscript.Quit
ElseIf GetPath.Count > 1 Then
MsgBox "2つ以上のファイルがドラッグ&ドロップされています。",,"警告"
Wscript.Quit
End If
Dim lineStr()
Call TXTEXtract(GetPath(0),lineStr)
'●●●TXTファイル内の文字列を配列に格納
Sub TXTExtract(FilePath,lineStr())
'テキストファイルを配列に格納
Dim inputFile
Set inputFile = FSO.OpenTextFile(FilePath,1,False)
Dim Con
Con = 0
ReDim Preserve lineStr(Con)
DO Until inputFile.AtEndOfStream
lineStr(Con) = inputFile.ReadLine
Con = Con + 1
ReDim Preserve lineStr(Con)
Loop
'ファイルを閉じる
inputFile.Close
Set inputFile = Nothing
End Sub
前半はドラッグ&ドロップしたファイルのフルパスを取得する。
後半のTXTExtractプロシャージャは引数1で指定したファイル内の文字列を引数2の配列に格納する。
ドラッグ&ドロップしたファイルが0か2つ以上あればダイアログを出して中断する。