OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

新しいファイルの作成について

  • すぐに回答を!
  • 質問No.192686
  • 閲覧数39
  • ありがとう数3
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 35% (35/99)

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

今、基になるファイル(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"
という構造です。
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.2
レベル14

ベストアンサー率 28% (4323/15247)

ファイルレコードを読みこんで配列にストックされています。学習書の解説では配列に一旦蓄える例が多いですが、ファイルレコードを読みこんで処理をして、ファイルへ書き出すとか印刷する場合は、まず配列を使わないロジックを考えるべきと思います。理由は(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
お礼コメント
sakky_t

お礼率 35% (35/99)

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

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

その他の回答 (全1件)

  • 回答No.1
レベル14

ベストアンサー率 28% (4323/15247)

「ローマ字設定をしなおして」とは、何を意味するのか判りません。ローマ字つづりから、ひらがなつづりに変換することですか。分からないのは私だけでしょうか。 ...続きを読む
「ローマ字設定をしなおして」とは、何を意味するのか判りません。ローマ字つづりから、ひらがなつづりに変換することですか。分からないのは私だけでしょうか。
補足コメント
sakky_t

お礼率 35% (35/99)

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

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


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


このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ