- ベストアンサー
新しいファイルの作成について
- タイピングのプログラムを作成し、新しいファイル(Syokyuu2)を作成する方法について教えてください。
- Syokyuu1というファイルからデータを読み込み、一部のデータを変更して新しいファイルSyokyuu2を作成したいです。具体的な記述方法を教えてください。
- Syokyuu1にはいくつかのデータが保存されていますが、それらのデータを読み込んで一部のデータを変更し、新しいファイルSyokyuu2を作成する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
ファイルレコードを読みこんで配列にストックされています。学習書の解説では配列に一旦蓄える例が多いですが、ファイルレコードを読みこんで処理をして、ファイルへ書き出すとか印刷する場合は、まず配列を使わないロジックを考えるべきと思います。理由は(1)配列は要素に上限があり制約があること(2)メモリーが節約出来る(3)処理速度を遅くしない(4)ロジック思考力を鍛える(5)蓄える必要がないケースが多いなどを思います。シーケンシヤルファイルでテキスト形式のファイルの場合 open filename for input as #1 do untill eof(1) line input ,a (処理) loop ご質問のケースでは、ファイルレコードデータは配列に入っており、レコードを読む必要はなく、配列の要素の上限が100なので for i=1 to 100 (aを処理してbに文字列をセット) print #1,b (またはwrite #1,b) next i で良いと思います。 「処理」の中身はロジックで変わってくるもので、巧拙が分かれるところですが、私のは拙いやり方ですが (1)zi,jiやja,jyaのような変換のペアーを配列にarray関数で持って(2)instr関数でペアー左を見つけて、(3)ペアー右に置きかえれば出来ると思います Private Sub Form_Click() ' Open "samplei.txt" For Input As #1 Dim a(100) As String '----簡単例のためデータをプログラム内にセットした a(1) = "aaazibbbb" a(2) = "aaaaaaazibbjabb" a(3) = "aaajabbbbbaaa" a(4) = "aajabbb" ' Open "sampleo.txt" For Output As #2 s = Array("", "zi", "ji", "ja", "jya") '2ペアーの例 '---------- For i = 1 To 4 '100 '4配列の例で手抜きします ' Line Input #1, a x = a(i) found = "no" For j = 1 To 4 Step 2 p = InStr(a(i), s(j)) 'a(i)の中にs(j)があるかどうか探す ' Form1.Print s(j), p If p = 0 Then GoTo ex1 '見つからなければ次ぎの変換文字列で探す Else b = Left(a(i), p - 1) '見つかったストリングまでの文字列をセット l = Len(a(i)) - (p - 1) - Len(s(j)) '変換後の文字列をセットを加える b = b & s(j + 1) & Right(a(i), l) '残りの文字列をくっ付ける a(i) = b ' Form1.Print b found = "yes" '「見つかった」というflag End If ex1: Next j '------ If found = "no" Then b = a(i) '変換対象の文字列が無ければ、元のままセット End If ' Print #1, b '----画面で確認のため記述をいれた Form1.Print x Form1.Print b Form1.Print "---" Next i End Sub
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17069)
「ローマ字設定をしなおして」とは、何を意味するのか判りません。ローマ字つづりから、ひらがなつづりに変換することですか。分からないのは私だけでしょうか。
補足
例えば、 Syokyuu1のファイルで "zinnja"(神社)というのを Syokyuu2のファイルでは "jinnjya"(神社)というふうに ローマ字のつづりを(zi→ji,ja→jya)にかえて 新しいファイルを作るということです。 もっと単純に、 ローマ字設定をしなおすということを省いて言えば、 100個の文字列配列を 1行ずつ改行してSyokyuu2という名前にして 新しいファイルを作成したいのです。
お礼
回答ありがとうございました。 最初新しいファイルを作成するつもりでしたが imogasiさんの回答をみてこういう考え方があるんだなぁ と考えさせられました。 はじめ、プログラムがよくわからなかったのですが 今日一日考えてみてやっと理解しました。 これを参考に作ってみようと思っています。 ありがとうございました。