2012-05-09 4 views
1

기존 데이터의 시작 부분을 텍스트 파일 앞에 추가/추가하는 방법. 기본적으로이 데이터 앞에 텍스트 파일의 헤더를 제공해야합니다. 이 헤더는 동적 데이터입니다. 이 데이터는 외부 소스 또는 SQL 패키지 또는 어딘가에서 가져옵니다. 그래서 텍스트 파일에서 데이터를 가져온 다음 텍스트 파일의 기존 항목/데이터에서 쉼표로 구분 된 헤더 텍스트를 제공하려고합니다. 앞에 추가로텍스트 파일에 머리글을 붙이는 방법

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

헤더 텍스트 :

나는 다음과 같이 텍스트 파일의 샘플 데이터를했습니다

HDR<TableName><DateTime> 

출력 내가 다음과 같이해야합니다 TABLENAME : 계정 날짜 시간 : 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을

+0

파일을 읽으려면 지금까지 작성한 코드를 게시하십시오. – shahkalpesh

+0

** 참고 : ** 이봐, 내가 필요한 결과를 얻었다. 하지만 VB6.0이 필요합니다.이 언어로도 도와주세요 .... – venkat

+0

제공된 C# 코드를 VB6으로 직접 변환 해보십시오. 변환 질문 중 일부가 달라 붙는다면 –

답변

8

주 두 언어에서 같은 활용하는 방법을 도와주세요. 가장 좋은 방법은 파일을 읽고 새로운 행으로 다시 쓰는 것입니다.

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); 
} 

아이디어에 대한 this answer에 크레딧하지만 개별적으로 게시 그것을 가치가 있도록 충분한 개선 : 여기에 효율적으로 할 수있는 하나의 방법이다. 당신은 테이블 이름과 날짜 시간을 받아 무언가를 원하는 경우

자, 잠깐 기능으로 이것을 추가 : 필요에 따라

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) 또는 유사한를 호출합니다.

+0

에 대한 새로운 질문을 시작합니다. 모든 것을 메모리에 읽어서는 안됩니다. 당신이 필요로하는 것에 달려 있습니다. – yamen

+0

불필요하게 복잡한 것으로 보입니다 – bsara

-2

첫 번째 답변의 역순으로 텍스트 파일의 헤더를 작성한 다음 추가 모드에서 해당 텍스트 파일을 열고 데이터를 추가하면 추가 모드에서 파일을 여는 데 사용됩니다. 코드 라인 : 관아의 답변

FileStream aFile = new FileStream(filePath, FileMode.Append, 
    FileAccess.Write);  
    StreamWriter sw = new StreamWriter(aFile);  
    sw.Write(text);   
    sw.Close();  
    aFile.Close(); 
+0

질문의 절반은 '적절한 위치'에서 처리하는 것이므로 임시 파일 처리 및 이동이 필요합니다. 내 대답은 개념적으로 (머리글 쓰기, 나머지 쓰기) 그러나 질문의 ​​나머지 부분을 다루며 아무 이유없이 두 번 파일을 열지 않습니다. – yamen

+0

그러나 귀하의 경우 임시 파일을 명시 적으로 삭제해야합니다. –

+0

임시 파일없이 어떻게 할 계획입니까? – yamen

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))) 
+0

어떻게 VB6.0에서 동일한 acheive 수 있습니까 ?? – venkat

+0

참고 : 필요한 코드로 결과를 얻었습니다. 하지만 VB6.0 에서이 언어로도 도와주세요 .... – venkat

1
String[] headerLines = new String[]{"HDR<TableName><DateTime>"}; 
String filename = "1.txt"; 
var newContent = headerLines.Union(File.ReadAllLines(filename)); 
File.WriteAllLines(filename, newContent); 
-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 
+0

그리고 여기에 임시 폴더를 찾을 수있는 몇 가지 코드가 있습니다. Karl Peterson에게서이 강좌에 들르십시오. http://vb.mvps.org/samples/SysFolders/ – MarkJ

관련 문제