datファイルを編集して上書き保存したい | |
---|---|
[195503] datファイルを編集して上書き保存したい- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/20(16:36)) □U R L/ 次のようなデータがあります。 行数 変更前 変更後 1 /AAA /AAA 2 /BBB /BBB *3 3,[9] 5,[9] 4 /CCC /CCC 5 1,2,b3-6 1,2,b3-6 6 /DDD /DDD *7 0,0,0,[0],0,[0] 1,2,3,[0],4,[0] 8 /EEE /EEE *9 [1],4 [1],4 行数に米印がある3,7,9行目たちを []のデータはそのままで、それ以外の値を 変更後のように編集して上書き保存したいです。 どのような方法がありますか? 宜しくお願い致します。 |
[195504] Re[1]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/20(16:38)) □U R L/ 図が見づらくすみません。 行数 変更前 変更後 1 /AAA /AAA 2 /BBB /BBB *3 3,[9] 5,[9] 4 /CCC /CCC 5 1,2,b3-6 1,2,b3-6 6 /DDD /DDD *7 0,0,0,[0],0,[0] 1,2,3,[0],4,[0] 8 /EEE /EEE *9 [1],4 [1],4 宜しくお願い致します。 |
[195505] Re[2]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/20(16:41)) □U R L/ 何度もすみません。 9行目が間違っていたので再掲します。 行数 変更前 変更後 1 /AAA /AAA 2 /BBB /BBB *3 3,[9] 5,[9] 4 /CCC /CCC 5 1,2,b3-6 1,2,b3-6 6 /DDD /DDD *7 0,0,0,[0],0,[0] 1,2,3,[0],4,[0] 8 /EEE /EEE *9 [1],4 [1],0 宜しくお願い致します。 |
[195507] Re[3]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/01/21(12:36)) □U R L/ 質問します。 datファイルとは、拡張子が.datのファイルのことですか? もし、そうならどんな形式ですか?(Outlook、文字コードなにがしのテキストファイル、他アプリ用) datファイルには変更前の値のみ記載されているのですね? そして、[ ]で囲まれている文字がある行に対してのみ変換するということで良いですか? もし、そうなら3→5、0,0,0,0→1,2,3,4、4→0はどういうルールがあるのですか? |
[195510] Re[4]: datファイルを編集して上書き保存したい- ■ / 記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/22(04:03)) □U R L/ kazuoさん ご覧くださりありがとうございます。 ご質問に回答致します。 datファイルは、仰る通り拡張子が「.dat」です。 形式というのはどこを見たらといですか?すみません。 このファイルはあるシステムで作られ使用する定義ファイルみたいなものです。 説明不足で申し訳ありません。 このファイルは常に「9行」で構成されており、 「/」で始まる文字、/AAAなども、いつも同じです。(項目名のようです) そして、変更がかかる行もいつも同じで、3行目、7行目、9行目です。 それらの行の[]以外の部分を変更します。 3行目の変更後の「5」、9行目の変更後の「0」は固定値で、 7行目は可変になるため、変数で対応を考えています。(別の部分から値取得) はじめworkbooks.openなどでいけると思ってたのですができず、 調べてみるとdatファイルを扱う情報がほとんど見つけられず困っていました。 説明不足で申し訳ありませんでした。 また何かあればご質問ください。どうぞ宜しくお願い致します。 |
[195512] Re[5]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/01/22(14:16)) □U R L/ メモ帳を起動下さい ファイル(F)-開く(O)... でその.datファイルを指定し、 開くウィンドーの下 文字コード(E): を 自動検出にして 開く(O)をクリックして下さい。 きちんと読めることを確認し、 メモ帳の下の右2つを教えて下さい。 例)Windows(CRLF) ANSI |
[195514] Re[6]: datファイルを編集して上書き保存したい- ■ / 記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/22(18:08)) □U R L/ kazuoさん お世話になります、色々とありがとうございます。 確認したところ、「Windows(CRLF) UTF-8」とありました。 これだとVBAでは処理できないですか? どうぞ宜しくお願い致します。 |
[195516] Re[7]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/01/23(13:00)) □U R L/ >確認したところ、「Windows(CRLF) UTF-8」とありました。 もちろん、ファイルi/oで作成可能ですが、 これならexcelでも編集可能です。 時間が取れないので、 Excelへの読み込みと書き込み後.batに名前変更のみとりあえず乗せます。 Sub 読み込み() Dim fileName fileName = Application.GetOpenFilename("バッチファイル,*.bat") If fileName = False Then Exit Sub FileCopy fileName, CurDir & "\しの.csv" Workbooks.Open CurDir & "\" & "しの.csv" End Sub Sub 書き込み() Workbooks("しの.csv").Close True On Error Resume Next Kill CurDir & "\" & "しの.bat" On Error GoTo 0 Name CurDir & "\" & "しの.csv" As CurDir & "\" & "しの.bat" MsgBox CurDir & "\" & "しの.bat" & vbCrLf & "として保存しました" End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195518] Re[8]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/23(13:20)) □U R L/ kazuoさん ご連絡ありがとうございました。 頂いたコードの確認もさせて頂きます。 ただすみません、私の説明が不十分でした。 やりたいことは、 フォルダにあるdatファイルの内容を 上記に記載している条件で「直接」処理し、上書き保存したいです。 Excelに取り込むことなく、配列などで行えるでしょうか? どうぞ宜しくお願い致します。 |
[195519] Re[9]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/23(13:29)) □U R L/ kazuoさん 書き忘れてしまいました。 私も色々調べてtextstreamが使えるのでは?と思い readallで変数に入れ、シートに出力はできました。 しかし、シートは使わずに、この変数の状態で処理はできないですかね? すみません、配列もよくわかっておらず、 例えば、配列にした場合、何行目や何文字目を指定して 編集できるのでしょうか?どうぞ宜しくお願い致します。 |
[195520] Re[10]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/23(13:51)) □U R L/ kazuoさん 度々すみません、シートに出力成功したのはLineInputでした。 いろいろテストしててゴッチャになってました。すみません。 |
[195524] Re[11]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/01/23(18:39)) □U R L/ 失礼、カンマ区切りがあるとExcel経由でcsvはダブルコーテーションが付いてしまいダメですね。 Sub 上書き() Dim fileName Dim ss As String Dim s() As String Dim i As Long, j As Long Dim sRep() As String, s7() As String sRep = Split("1 2 3 4") '7行目変更後の数値を半角スペース区切りで fileName = Application.GetOpenFilename("バッチファイル,*.bat") If fileName = False Then Exit Sub With CreateObject("ADODB.Stream") .Charset = "UTF-8" .Open '読み込み .LoadFromFile fileName ss = .readtext '変更 s = Split(ss, vbCrLf) 'splitは0ベースなので分り易く? -1を書いています s(3 - 1) = "5,[" & Split(s(3 - 1), "[")(1) '3行目を5 に変更 s(9 - 1) = Split(s(9 - 1), "]")(0) & "],0" '9行目を0に変更 s7 = Split(s(7 - 1), ",") '7行目をsRepリストに変更 For i = 0 To UBound(sRep) Do Until Not s7(j) Like "[[]*" '[*以外を置き換え j = j + 1 If UBound(s7) < j Then MsgBox "リプレースリスト sRep の指定ミスが考えられます" Exit Sub End If Loop s7(j) = sRep(i) j = j + 1 Next s(7 - 1) = Join(s7, ",") ss = Join(s, vbCrLf) '上書き .Position = 0 .writetext ss, 0 .savetoFile fileName, 2 .Close End With End Sub この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195528] Re[12]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/24(04:38)) □U R L/ kazuoさん お世話になります、コードありがとうございました。 掲載したデータで確認したところ動作は完璧でした。 ここでまた説明不足で申し訳ありません。 実際のデータには[]がありません。わかりやすくと思い私が付けてしまいました。 変更箇所は 3行目は1文字目 7行目は1文字目、2文字目,3文字目,5文字目 9行目は2文字目 となります。本当に申し訳ありません。 それとAsRep = Split("1 2 3 4")部分を変数対応したいです。 AAA(3)という変数を使いたく、上記のコードを sRep = Split(AAA(0) AAA(1) AAA(2) AAA(3)) としたらエラーになってしまいました。 どのように直したらよいかも教えて下さい。 どうぞ宜しくお願い致します。 この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195529] Re[13]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/01/24(08:42)) □U R L/ 動作完璧ではありません。 朝、あれ、BOM削除したっけと思い起きたのですが、削除忘れていました。 BOM削除は終わったのですが、新たな質問。。。暫くお待ち下さい。 |
[195530] Re[14]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/01/24(08:54)) □U R L/ >7行目は1文字目、2文字目,3文字目,5文字目 文字目って私の感覚では 1,3,5,0,0,0の場合 1文字目:1 2文字目:, 3文字目:3 5文字目:5 です。 実際の値を0,0,0,0,0では無く、 12,3,4,567,89とかで説明下さい。 |
[195532] Re[15]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/24(13:21)) □U R L/ kazuoさん お世話になります、お忙しい中ご対応ありがとうございます! 私の説明不足の上、説明が下手ですみませんでした。 文字目の話ですが、例えば「12,3,4,567,89」こちらのデータでいうと 1文字目は、「12」 2文字目は、「3」 3文字目は、「4」 5文字目は、「89」 となります。つまりは変更行だけカンマ区切りになります。 お手数をお掛けしてすみません。どうぞ宜しくお願い致します。 |
[195533] Re[16]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/24(13:35)) □U R L/ kazuoさん お世話になります、度々すみません。 BOMのお話ですが、他の者に聞いたところSJISになっている人もいたようです。 頂いたコードはSJISにしてもきちんと処理されてましたが、 CharsetをSJISにしたとして、今後大きな影響は考えられますか? もしくは、この文字コードを意識しない方法はありますか? Charsetをコメントアウトしたらエラーになってしまいました。 ちなみに、私たち側にシステムがないため、システムの動作確認ができずにいます。 (他の人のはなしだとSIJIでもいいというひともいます。。) どうぞ宜しくお願い致します。 |
[195534] Re[17]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ kazuo -(2023/01/24(17:08)) □U R L/ >CharsetをSJISにしたとして、今後大きな影響は考えられますか? >もしくは、この文字コードを意識しない方法はありますか? >システムの動作確認ができずにいます。 当然私にはシステムで問題無いかは解りませんが、 全てASCIIコードのデータ(&h00〜&h7F)のみということでしょうか? (漢字などの全角文字が無い、半角カナやウムラルト文字も無い) もし、そうならS-JISもUTF-8も共通です。 ちょっと無駄な作業になりそうなので、コードの提供は見送ります。 |
[195536] Re[18]: datファイルを編集して上書き保存したい- ■記事引用/メール受信=OFF■ □投稿者/ しの -(2023/01/24(19:43)) □U R L/ kazuoさん お世話になります、お返事ありがとうございました。 なぜ私がUTF8になったのかはわからないのですが、 確認したところSJISで大丈夫とのことでした。 色々とご面倒をお掛けしてすみませんでした。 まだ解決に至らないため暫く保留とさせて頂きます。 kazuoさん、本当にありがとうございました。 |
このトピックに書きこむ |
---|