VBScriptについて必死に話し合うスレ [無断転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
>>123 Node.js使ったことある?あれマジヤバくない?なんていうかマジヤバくない? 超速いんですけど、メモリ効率もすごいし、zip解凍するだけで使えるハイパーポータビリティだし あれはねヤバイね ピラフが居なくなったらMSもVBScriptから撤退するだろうな 仕事で初めて使うことになった プログラミングとかの経験はほぼない CSVファイルをデータベースにインサートをするスクリプト作ることになったんだけど、どんなコードを書くのか想像すら付かない コードも暗号にしか見えないし出来るのか… 割とガチでJavaScript使った方が良いと思う >>128 だけど とりあえず少し触ってデータベースへアクセスする部分は書けた(全部で5行くらいだけど)けどCSVをデータベースにインサートする部分が全く分からん このケースってそんなにないのかな? ネット見ても似たサンプルが見当たらない… どういう考え方というか進め方をすればいい? >>132 やり方としてはCSVからSQL(insert文)作って実行するだけじゃない >>133 ありがとう でも全然分からん CSVファイルの中身を一度抽出する必要がある? それともファイルごとDBぶん投げるの? あと、インサート文を書くにしてもVALUE部分はどう書くの? >>134 csvファイルの中身を抽出してカラム毎に分解してinsert文を作る。 あとはピラフ大王に教えてもらえ >>135 ありがとう やっぱ中身の分解は必要なんだね もう少し調べてみる ファイルの中身を列ごとに取得 SQL文作成 データベース接続 SQL投げる って流れで良いかな? 質問ばっかりで申し訳ないんだけど、日付でファイルを指定したりも出来る? >>136 データベースエンジンによってはcsvをインポートするコマンドがあったりする。 SQLServerのbcpコマンドとか。 >>138 そうなんだね ポスグレ使ってるから調べてみる 日付はCSVに付加させてて、今日の日付のファイルのCSVを読み込むって事をやりたい 行の取得が一般的なの?列の取得ってどうやるんだ? >>139 scripting.filesystemobjectをcreateobjextして opentextfileで開いてreadlineするか readallで全部読んでから、vbcrlfでSplitしてFor eachで処理する 読んだ一行は、カンマでSplitして文字列はダブルクォーテーションで囲んだりしながらvalue部分作成 あとはあらかじめ用意したSQLにくっつけて実行 >>140 ありがとう 呪文にしか見えん… ちょっと調べながら解読してみる… >>142 スペル間違ったcreateobjectね ____/ ̄ ̄ / │ ̄\__ ゴゴゴ・・・ / .. 、 ,_  ̄\_/ ̄ ̄\/ ̄ ゴゴゴゴゴゴ・・・ ___/ ̄へ√⌒l⌒´ ̄ ̄\_ ´ / \ _ ./ ̄ ̄ ̄\ / __ `ソ/ ─ ─ \/ ̄/ \/゚ (●)。 (●) \/ rへ,ノ ・・・・・・ __>-へ| i (__人__) |ノ :.\_ .:/从へ、.゚` ⌒´o.ノ从rーヘ_ _::ノ :ノ`⌒Y⌒´:: \ .::┘ :│ ゚ >>142 です >>140 の人丁寧に教えてくれたけど全然分からなかった…すまん… CSVの読み込みにCOPYが使えるってのを見つけて試そうと思ったんだけどファイルの先頭3行に必要ない行があるからskipを使ってコード書いたけど実行すると”skip”付近で記述がおかしいみたいなエラーが出る これ何かおかしい? Sql = "COPY datatest FROM 'C:\\FTP_Test\\LOG01\\00006401' skip 3; " ピラフの雰囲気だとなんでもエクセルとVBA使ってそうだけど >>152 ピラフ貧乏だからエクセル持ってないの! >>151 ポストグレスの重要機密文書見たけどskipは載ってなかったよ skipオプションは使えないんじゃないかな https://www.postgresql.jp/document/9.3/html/sql-copy.html テキストエディタでサクッちゃいなよ やっちゃえエディタ >>154 skipないのか… >>140 の人がレスくれた内容がこの辺かな? http://bayashita.com/p/entry/show/85 これを 読んだ一行は、カンマでSplitして文字列はダブルクォーテーションで囲んだりしながらvalue部分作成 あとはあらかじめ用意したSQLにくっつけて実行 って全然イメージ付かない… 1行ずつよんだ結果は上のサイトで言う所のstrLineに入ってるって理解で良いのかな? この変数の中身をどう分解すれば良いんだ? 聞いてばっかりでごめん >>155 strLineには1行ずつ読んだ結果が入ってるよ Split関数を使ってカンマで切って配列に変換すればいいよ Dim values values = Split(strLine, ",") >>156 ありがとう CSVの列の数とテーブルの列の数が同じなら下の書き方で上手くインサートできる? INSERT INTO test (aaa,bbb,ccc) VALUES (values) >>157 数も順番も同じなら、テーブル名も省略できるよ “今日の日付のファイル”を読み出すって場合はどういうコードになるの? 日付を付加するとかはあるけど探して読み出すっていうのが見つけられなかった >>159 どこに日付が有るの? ファイル名なのか、作成日付なのか変更日付なのか ただ日付と言われても誰も解らないよ >>160 ごめん 読みだしたいファイルに日付が付加されてるんだけど(20171217みたいな感じ)、今日の日時が付いてるファイルのみ判別して読み出すっていうのがやりたい >>162 日付はファイルを作成した日時が付加されてる 今はパスに対象のファイルを指定してるから読み出したり出来てるんだけど、日付の指定で読み出し対象を変えたいなと思ったんだ >>162 パス名に一定の規則に基づいた日付がついていて、かつその日付を信頼して制御してOKなら、InStrとかReplaceを使ってパスを検索すれば良い 実際のファイル作成日や最終更新日を考慮しなければならないなら、FileSystemObjectとかを使ってFileのプロパティを調べて検索するべし >>162 ワイルドカードとかの指定は出来ないので ファイル名を読み出して判定してからオープンする必要がある sdate=replace(date,"/","") set ofo = fso.GetFolder(folder) とかでフォルダー取得して For each ofi in ofo.files でファイル一つずつ読み出し if instr(ofi.name,sdate) <> 0 then ファイル読み出し、DB書き込み処理 end if こんな感じかな / ̄ ̄\ / \ |::::::: : | , ノ. . |::::::::::::: | 'ヽ ( |::::::::::::: | ) ) . |::::::::::::::: } ` ノ . ヽ____ } ( ,ノ'  ̄ r'ニニヽ._\. ノ ;;. r':ニニ:_`ー三`:く._ [l、. /: : : : : : :`,ニ、: :_:_;> /,ィつ . /: : : : : : : : / : : : ヽ\ ,∠∠Z'_つ | : :.:.:.:.:.: . :/: : : : : : l : ヽ. / .r─-'-っ . |:.:.:.:.:.:.:.:.:.,' ''" ̄: : :l: : : :l / ):::厂 ´ |:.:.:.:.::.:.:.:l -─-: : /:_:_:_:_l / ̄`Y´ . |:.:.::.:.::.::l.__: : : :/::: : : : :l/⌒ヽ: :〉 |::.:::.::.::l: : : : : : /:::: : : : : |: : : : ゙/ >>165 >>162 です 見ながらやってみたんだけどわからなかった・・・ 日付を判定する元にしてるのがsdateかなと思って中身見ようとCall MsgBox(sdate)ってやっても今日の日付が表示されないのはsdateには今日の日時が入ってないからなのかな? あと、if instr(ofi.name,sdate) <> 0 then の文のinstrの意味って検索が一致した文字の位置を返すって役割って理解であってるかな? if instr(ofi.name,sdate) <> 0 then この文の意味がよく分からなくて・・・ 見ながら書いたコードなんだけどもう少しっぽいのに分からない・・・ Dim objFileSys Dim objFolder Dim objFile Dim sdate Dim a Set objFileSys = CreateObject("Scripting.FileSystemObject") sdate = Replace(Data,"/","") Set objFolder = objFileSys.GetFolder("c:\Filedate") For Each objFile In objFolder.Files If instr(objFile.Name,sdate) Next >>170 dataじゃなくてdateね Dim objFileSys Dim objFolder Dim objFile Dim sdate Dim a Set objFileSys = CreateObject("Scripting.FileSystemObject") sdate = Replace(Date,"/","") Set objFolder = objFileSys.GetFolder("c:\Filedate") For Each objFile In objFolder.Files If instr(objFile.Name,sdate) <> 0 then end if Next >>171 ありがとう 綴りを間違えてた… 本当に馬鹿な質問で申し訳ないんだけど If instr(objFile.Name,sdate) <> 0 then で今日と判別されたものはどこに入ってるの? 例えば今日の日付のファイルをデータベースに処理するとして、ここで判別された物がファイルのパスにしたり出来るのかなって思ってるんだけど理解間違ってるかな… 確認しようと中身をメッセージボックスに出してみようと思ったんだけど( )の中身はなんて指定すれば出せるかな Set objFileSys = CreateObject("Scripting.FileSystemObject") sdate = Replace(Date,"/","") Set objFolder = objFileSys.GetFolder("c:\Filedate") For Each objFile In objFolder.Files If instr(objFile.Name,sdate) <> 0 then Call MsgBox() end if Next >>173 ありがとう 途中でメッセージボックス出してファイルの名前だったり中身のデータも取得できた みんな丁寧に教えてくれてほんとにありがとう $folder = "c:\Filedate" # yyyymmdd $today = Get-Date -Format "yyyyMMdd" # 日付を含んだ $filter = "*" + $today + "*" $file = ls -File -Path $folder -Filter $filter # 読み込み Get-Content $file PowerShell で書いた。 PowerShell, PowerShell_ise で実行して 修正 Get-Content では、相対パスでは、作業フォルダの場所次第で、動かないことがあるから、 絶対パスにしておいた方が無難 ># 読み込み >Get-Content $file # 読み込み Get-Content $file.FullName 文字列 "平成29年12月18日" をDate型に変換したいのですがどうやればいいですか 教えてくださいお願いします "平成29年12月32日" のように不適切な日付の場合はアラートを出したいです よろしく教えてくださいよろしくおねがいします >>140-141 CSVの読み込み時に一律で Split(Line, ",") するのは勧めない。CSVの仕様的に正しくない。 「"」でくくられて「,」を持つフィールドを正しく取得できない。 良い機会だから、トークン切り出しクラスを実装してみたら?スキル上がるよ。 >>165 これくらい単純な事には、Execオブジェクトに dir /a-d /b させて StdOut をもらった方が楽。 ワイルドカードが使えるし。 >>179 「昭和80年」のような場合はどうすんのよ? >>180 そんなクラス作るくらいならADOでいいよ execとかは楽かもしれないけど美しくないな >>182 CSVをmdbあたりに突っ込んでから再度取得する感じ? >>183 テキストクラスで直だよ 読み出しはDBと同等に出来る 書き込みできないけどね >>181 NGになって欲しい なぜならば平成しか来ない想定だから 間違えた。 >>185 は >>184 ね。 ADO にそんなのあんの? >>187 テキストドライバがあるよ ODBCドライバかOLEドライバかACEなんとかで提供されてるはず VBSは正規表現が使えるから、文字列から数字をパターンマッチで取り出して、 後は、数の範囲を確認する。 西暦や和暦では月は1〜12であることはわかるね。各月の日数は月によって異なる。 カレンダー見ればだいたいわかるね。ただし、うるう年では2月は29日になる。うるう年の判定方法は検索して。 年号はデータを用意するしかない。 >>184 追加はできるんじゃなかったかな 超絶遅いけど >>186 法律上は 明治45年7月30日と大正元年7月30日は同じ日 大正15年12月25日と昭和元年12月25日は同じ日 だからどちらも入力として受け付けるってことでいいのか? >>189 日本語で言われても全然わからない VBScriptランゲージでどうぞよろしくお願いいたします >>191 平成だけで良いです 明治も大正も昭和も仕様に含めない方向で >>188 見つかった。こんなのあったのね…。 場合によっては使えるかな…。 >>190 insertは出来なかったはず insertの変わりに普通にWritelineで追記してた >>195 うそーうそーうそー ちょっと明日起きたら試してみる 毎年のことだが、1月は31日あり、2月は28日か29日あり、3月は31日あり、4月は30日あり、5月は31日あり、6月は30日あり、7月は31日あり、 8月は31日あり、9月は30日あり、10月は31日あり、11月は30日あり、12月は31日まである。 >>193 ちうことは… 1. フォーマットに従ってなければはじく。 2. 存在し得る日付かどうかを調べてはじく。 3. 合格したら西暦変換して出力 大体こんな感じ…だけどおまいさんなら楽勝で作れるでしょ。 今日は寝る。 >>194 CSVファイルの読み込みはイレギュラーケースがExcelとテキストドライバーで違ったりしてて 正しいものだけ読めれば良いですってことなら使えるのだろうけれども Excelと同じ結果を得たいとか、不正なデータがあったらアラート出したいとか そういう要求があるとパーサこしらえなきゃいけなかったりするんだよね どこまで細かく見ますかってことになろうかと >>198 1.は正規表現でイケると思うの 2.はどうやるの? 3.もお願い 以上、よろしくお願いします >>197 できそうですか!?よろしくお願いします!! カンマ区切りのCSV よりも、タブ区切りのTSV の方が良い でも、TSVでも、データ内にタブを使わないように。 タブは、区切り文字のみに使うこと >>178-179 そもそも、日本の和暦に対応している、OS のAPI があるのかな? >>202 わからぬ、だがピラフはそれを欲しい、作ってくれるか? >>199 そこは同意だなぁ。 >>202 APIはあるけどVBScriptからは叩けない。 PowerShellで日付をチェックする https://lightgauge.net/powershell/3742/ 西暦なら、PowerShell でチェックできる 大昔に、帳票アプリを開発した際は、 和暦年号の始まり・終わりの年月日を、DB (またはファイル)に入れておいて、 新しい年号も、DBへ追加することで、対応できるようにしていた On Error Resume Next DateValue("平成29年12月18日") Call MsgBox(Err) >>207 13って表示されました これは不吉な証拠だと思います CSVをADODBで読み込んでみようと思ったの 64bitではACCESSの何かをインスコしないダメみたいなの 仕切りが高いと思います >>210 ごめんこっちだった https://www.microsoft.com/ja-jp/download/details.aspx?id=13255 再配布可能モジュールだからどこに入れても問題ないけど AccessDatabaseEngineだからactuallyといえばAccessかも >>215 以前、おまいさんのコード見たけど、コーディングスタイルが変化してんのな… >>217 …と来ると思った。 その進歩の無さがこのスレを支えているのかも知れないな。 VBScript は「間違った、VB的な」ハンガリアン記法を敢えて使った方がいい場面があるのだが、まだ分からないのか…。 あと、あれだ。 「面倒だから書かない」と「面倒だけど書くべき」場面の区別が付いてない。 自分だけが使う使い捨てコードならともかく、意志のないコードを人様に見せたらいかんよ。 ま、ネットにコードをアップするくらいならコピペ元のURLを貼ってくれた方がエコなのでそっちを勧める。 間違ったハンガリアンはとてもすごいんだとみんなに使ってもらいたいんだという 強いお気持ちをお持ちになっておられるのが伝わってきました 書かないべき書くべきところの区別が自分はついているんだと 自分ならこれを書くのに自分ならこれを書かないのにという思いを抱いておられることも 痛いほど伝わってきました 記法なんて好きにすればいい人それぞれ違っていいんだと ピラフは思うけれどもそこまで強い思いがあるんだったらみんなに実物を見せるのがいんじゃないかな これが自分が思う最高のコードだとバシーンと出したらいんじゃないかな ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる