본문 바로가기
개발노트/C#

[C#] 텍스트 파일 중간에 문자열 삽입하기

by lovvepearl 2024. 3. 22.

텍스트 파일 내 문자열 삽입은 아래의 방법으로 첫 행 또는 마지막 행에 가능하지만,

string path = {텍스트파일 경로};
string text = {입력 데이터};

//기존 파일의 마지막 행에 추가
File.AppendAllText(path, text + Environment.NewLine);

//기존 파일 내 문자열 읽어오면 첫 행 또는 마지막 행에 추가 가능
string data = File.ReadAllText(path);
File.WriteAllText(path, data + text); //마지막 행 추가
File.WriteAllText(path, text + data); //첫 행 추가

 

텍스트 파일의 원하는 위치에 문자열을 삽입할 수는 없을까? 

결론 : '할 수 있다' 이다😽  

 

텍스트 파일을 리스트 형식으로 변경하여 원하는 위치에 문자열을 삽입하는 것이다.

//using System;
//using System.IO;
//using System.Collections.Generic;
//using System.Text;

//텍스트 파일은 5개 항목이 tap으로 구분되어있는 행 데이터로 구성
//Mapping한 행에 6번째 항목 fileName을 삽입하는 방법

bool res = false;
string path = {텍스트파일 경로};
string fileName = {추가 데이터};
string data = {데이터 추가를 위한 Mapping 데이터};

string[] lines = File.ReadAllLines(path);

int index = -1; //Mapping한 행의 index
string processedData = ""; //삽입할 행 데이터
for(int i=0; i<lines.Length; i++) {
    if(lines[i].Contains(data)) {
        index = i;
        //파일명 기입력 상태인 경우, 건너뛰기
        if(lines[i].Split("\t").Count() == 6) { 
            continue;
        } else {
            string mainTitle = lines[i].Split("\t")[0];
            string title = lines[i].Split("\t")[1];
            string dept = lines[i].Split("\t")[2];
            string subject = lines[i].Split("\t")[3];
            string content = lines[i].Split("\t")[4];
            string text = mainTitle + "\t" + title + "\t" + dept + "\t" + subject + "\t" + content;
            //6번째 항목 추가하여 행 데이터 내용 변경
            processedData = lines[i].Replace(text, text + "\t" + fileName);
            res = true;
            break;
        }
    }
}

//텍스트 파일 내 Insert를 위해 텍스트 파일을 리스트 형태로 변환
If(processedData != "") {
	List<string> list = new List<string>();
	list.AddRange(lines); //리스트에 배열요소 추가
	list.Insert(index+1, processedData); //Mapping한 행의 다음 행에 추가
	list.RemoveAt(index); //Mapping한 행 삭제
	File.WriteAllLines(path, list.ToArray()); //리스트를 배열로 변환하여 입력
}

return res;