一度テキストファイルを別の場所にコピーして、出来たテキストファイルの
内容を変更して保存するのではなく、
読み込んできたテキストファイルの内容を変更して、
変更する前のテキストファイルは元の場所に残った状態で、
変更したテキストファイルを直接別の場所に保存することは出来ますか?
よくわからん
あえてソース例は書きません。
Delphiではというより他言語でもほとんどそうですが
ファイルの内容を書き換える場合、まずメモリに読み込んで
変更した後にファイルに保存します。
ですので読み込むときのファイル名と別のファイル名で書き込めば
元テキストファイルを残したまま書き換えて別ファイル名で保存できます。
説明がへたで申し訳ございません。
テキストファイルAがC:¥Aフォルダにあるとします。
このテキストファイルAの内容を変更する。
変更したテキストファイルAをC:¥Bフォルダに保存する。
C:¥Aフォルダには変更前のテキストファイルAが残ったまま存在する。
このようなことは出来ますか?
出来ます。(簡単に出来ます)
テキストファイル・ルーチンを使うなら、
AssignFileで指定するファイル名を読む時と書く時で変えます。
(テキストファイル・ルーチン以外の読み書き手段もありますが……)
でも文面を読むにつけ、
テキストファイルを扱った経験がおありかどうかが問題となります。
単純に読み書きをした経験はおありでしょうか?
TStringListで
LoadFromFile(ファイルA)
SavaToFile(ファイルB)
とか^^;
takeさん、Fazzさんレスありがとうございます。
>テキストファイルを扱った経験がおありかどうかが問題となります。
>単純に読み書きをした経験はおありでしょうか?
Delphiを使い始めて、まだ数日の超素人です。
ほかの言語も触れたことありません。
テキストファイルを扱った経験はまったくありません。
AssignFileというのを使えば出来るんですね。調べてみます。
るるとん@K さんレスありがとうございます。
参考にさせていただきます。
テキストファイル・ルーチンを使う場合、
AssignFileだけでは扱えませんのでご注意を。
(他の一連の手続きとセットで使います)
元々テキストファイル・ルーチンは原始的な手段であることもご注意を。
どの手段を使うにしても、
Aファイルを読み込んで編集して、
改めてBファイルに書き出すということになりますが、
Aファイルを読み込んで編集しても、
上書きしない限りはAファイルの内容は変わりません。
Tstringlistを使いなんとか、テキストファイルを読み出し、
別の場所へ保存できるようになりました。
続けて質問なんですが、例えば、テキストファイルのデータが
下記のように区切られている時、kを、Lに変えてファイルに保存するに
はどうすればいいのですか?
a,b,c,d,e,f,g
h,i,j,k,l,m,n
・
・
・
1,2,3,4,5,6,7
一応いいますがStringListは最後に.freeで解放してくださいね
>下記のように区切られている時、kを、Lに変えてファイルに保存するにはどうすればいいのですか?よく分かりませんが、文字列内のkをすべてLにするには
SLがTStringlistで
SL.Text:=StringReplace(SL.Text,'k','L',[rfReplaceALL]);
ですが、多分違うことがやりたいはず
るるとん@Kさんご忠告ありがとうございます。
ちゃんと.freeで解放しております。
>よく分かりませんが、文字列内のkをすべてLにするには
そういうことではなくて、もっと基本的であると思われる
カンマを区切と考えて、任意のm行目のカンマn個目の値を換えたいのです。
さぁ、どうやるんでしょうね^^;
https://www.petitmonte.com/bbs/answers?question_id=833
これじゃないすか?
2次元的なテキストファイルをTStringListで扱うときは
こんな感じに1次元になおしながら処理して使う事が多いと思います。
でも根本的に他の方法を使った方が良いような気もします。
t1 := TStringList.Create;
t2 := TStringList.Create;
try
t1.LoadFromFile(ファイル名A);
for j:= 0 to t1.Count -1 do begin // 行単位ループ
t2.CommaText := t1[j]; // <- 1行分をカンマごとに分割
for i:=0 to t2.Count-1 do begin // カンマ区切り文字列ごとのループ
if t2[i] = 'k' then t2[i] := 'L'; // 置換処理
end;
t1[j] := t2.CommaText; // <- カンマ区切りに直す
end;
t1.SaveToFile(ファイル名B);
finally
t2.free;
t1.free;
end;
takeさん的確かつソースまで付けていただきありがとうございます。
おかげさまで解決できました。
>でも根本的に他の方法を使った方が良いような気もします。
他の方法とはTStringlistを使わないということですか?
この方法は何か問題があるんですか?
ツイート | ![]() |