1

テキスト ファイル内の既存のデータの先頭にテキストを追加/追加する方法。基本的に、テキスト ファイル内のこのデータの前にヘッダーを提供する必要があります。このヘッダーは動的データです。このデータは、外部ソースまたは SQL パッケージ、またはどこかからのものであることに注意してください。したがって、テキスト ファイルにデータを取得した後、テキスト ファイルの既存のエントリ/データにカンマで区切られたヘッダー テキストを提供したいと考えています。

以下のように、テキストファイルにサンプルデータがあります。

123,"SAV","CBS123",2010-10-10 00:00:00
456,"CUR","CBS456",2012-02-01 00:00:00

前に追加するヘッダー テキスト:

HDR<TableName><DateTime>

以下のように出力する必要があります: TableName: Account DateTime: 2012-05-09 12:52:00

HDRAccount2012-05-09 12:52:00
123,"SAV","CBS123",2010-10-10 00:00:00
456,"CUR","CBS456",2012-02-01 00:00:00

VB6.0、C#.NETの両方の言語で同じものを取得する方法を教えてください

4

5 に答える 5

10

技術的には、ファイルに「挿入」してすべてのコンテンツを「シフト」することはできないことに注意してください。あなたができる最善のことは、ファイルを読んで新しい行で書き直すことです。これを効率的に行う 1 つの方法を次に示します。

static void InsertHeader(string filename, string header)
{
    var tempfile = Path.GetTempFileName();
    using (var writer = new StreamWriter(tempfile))
    using (var reader = new StreamReader(filename))
    {
        writer.WriteLine(header);
        while (!reader.EndOfStream)
            writer.WriteLine(reader.ReadLine());
    }
    File.Copy(tempfile, filename, true);
    File.Delete(tempfile);
}

アイデアに対するこの回答の功績ですが、個別に投稿する価値があるほど改善されました。

テーブル名と日時を受け入れるものが必要な場合は、これを 2 番目の関数として追加します。

static void InsertTableHeader(string filename, string tableName, DateTime dateTime)
{
    InsertHeader(filename, 
                 String.Format("HDR{0}{1:yyyy-MM-dd HH:MM:ss}", 
                 tableName, 
                 dateTime));
}

したがってInsertHeader(filename, "Account", DateTime.Now)、必要に応じて電話するか、同様のことを行ってください。

于 2012-05-09T07:36:15.320 に答える
2
var fn = @"c:\temp\log.csv";
var hdr1 = "Account";
var hdr2 = "2012-05-09 12:52:00";
System.IO.File.WriteAllText(fn, System.String.Format("HDR {0} {1}\n{2}", hdr1, hdr2, System.IO.File.ReadAllText(fn)))
于 2012-05-09T07:45:54.723 に答える
1
String[] headerLines = new String[]{"HDR<TableName><DateTime>"};
String filename = "1.txt";
var newContent = headerLines.Union(File.ReadAllLines(filename));
File.WriteAllLines(filename, newContent);
于 2012-05-09T07:48:42.187 に答える
-1

ヤーメンの答えのVB6翻訳。エアコード!私はこれをコンパイルしていません。

Sub InsertHeader(ByVal filename As String, ByVal header As String) 
  Dim tempfile As String 
  Dim readUnit As Integer 
  Dim writeUnit As Integer

  tempfile = "c:\tempfile" '' TODO generate better temporary filename - 
                '' here is a link to help with getting path of temporary directory 
                ''  http://vb.mvps.org/samples/SysFolders 

  readUnit = FreeFile 
  Open filename For Input As #readUnit 
  writeUnit = FreeFile 
  Open tempfile For Output As #writeUnit 

  Print #writeUnit, header
  Do Until Eof(readUnit) 
    Dim nextLine As String 
    Line Input #readUnit, nextLine 
    Print #writeUnit, nextLine 
  Loop

  Close readUnit 
  Close writeUnit 

  Kill filename
  FileCopy tempfile, filename 
  Kill tempfile  
End sub 
于 2012-05-10T02:24:06.813 に答える
-2

最初の回答の逆の順序でそれを行うことができます。つまり、最初にテキストファイルにヘッダーを書き込んでから、そのテキストファイルを追加モードで開き、データを書き込みます。ファイルを追加モードで開くには、次のコード行を使用します。

   FileStream aFile = new FileStream(filePath, FileMode.Append,
   FileAccess.Write);       
   StreamWriter sw = new StreamWriter(aFile);       
   sw.Write(text);        
   sw.Close();       
   aFile.Close();
于 2012-05-09T07:42:57.730 に答える