タイピングのプログラムを作っています。

今、基になるファイル(Syokyuu1)があり
ローマ字設定をしなおして
新しいファイル(Syokyuu2)を作りたいと考えています。

FINum = FreeFile
Open "Syokyuu1.txt" For Input As #FINum
i = 0
Do While Not EOF(1)
Input #FINum, wk1(i)
i = i + 1
Loop
Close #FINum

という具合にSyokyuu1を読み込んで
wk1(100)に保存するところまでできました。

※ wk(n)の構造:wk(0)=inu,wk(1)=ennpitu,wk(2)=honn・・・

ここでwk(0)からwk(99)までローマ字の設定をしなおして
新しいファイルSyokyuu2を同じ構造で作成したいのです。
その場合どのように記述すればよろしいですか?
よろしくお願いします。

Syokyuu1の中は
"inu"
"ennpitu"
"honn"
という構造です。

このQ&Aに関連する最新のQ&A

A 回答 (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
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
最初新しいファイルを作成するつもりでしたが
imogasiさんの回答をみてこういう考え方があるんだなぁ
と考えさせられました。

はじめ、プログラムがよくわからなかったのですが
今日一日考えてみてやっと理解しました。
これを参考に作ってみようと思っています。
ありがとうございました。

お礼日時:2002/01/08 23:40

「ローマ字設定をしなおして」とは、何を意味するのか判りません。

ローマ字つづりから、ひらがなつづりに変換することですか。分からないのは私だけでしょうか。

この回答への補足

例えば、
Syokyuu1のファイルで
"zinnja"(神社)というのを

Syokyuu2のファイルでは
"jinnjya"(神社)というふうに
ローマ字のつづりを(zi→ji,ja→jya)にかえて
新しいファイルを作るということです。


もっと単純に、
ローマ字設定をしなおすということを省いて言えば、
100個の文字列配列を
1行ずつ改行してSyokyuu2という名前にして
新しいファイルを作成したいのです。

補足日時:2002/01/06 03:29
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング