如何在行的特定索引处书写?

时间:2018-09-12 13:15:54

标签: c# asp.net streamreader streamwriter

Stackoverflow的好日子,

我想在txt文件的一行的特定点写一些文本。 所以我想在该行的两个;之间写点东西。 文本文件的行是:20180912_0149;KIV\vischer;12.09.2018;01:49;;

如果我单击“ Geht”按钮,我想写它。我用streamreader和writer尝试了不同的方法,但没有解决方案。

这是我的aspx.cs和助手类的代码:

Aspx.cs:

namespace Zieterfassung_0._0._2pre_alpha
{
    public partial class Zeiten : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string sPath = @"C:\VSTO\Projects\Zeiterfassung\Zeiterfassung\obj\Debug\Zeiten.txt";
            tb_User.Text = WindowsIdentity.GetCurrent().Name.ToString();
            tb_Datum.Text = DateTime.Now.ToString("dd.MM.yyyy");
            tb_Zeit.Text = DateTime.Now.ToString("hh:mm");
            cZeile KommtDatumZeit = new cZeile();

            if (File.Exists(sPath))
            {
                using (StreamReader sr = new StreamReader(sPath))
                {
                    while (!sr.EndOfStream)
                    {
                        KommtDatumZeit = cZeiterfassung.GetZeileObjectFromZeileString(sr.ReadLine(), ";");
                    }
                }

            }
            tb_Kommt.Text = KommtDatumZeit.dtKommt.ToString();
        }
        protected void btn_Geht_Click(object sender, EventArgs e)
        {
            string sAusgabeGeht = string.Format("{0:hh:mm}", tb_Zeit.Text);
            string sPath = @"C:\VSTO\Projects\Zeiterfassung\Zeiterfassung\obj\Debug\Zeiten.txt";
            FileInfo fi = new FileInfo(sPath);
            cZeile Geht = new cZeile();

            using (StreamReader sr = new StreamReader(sPath))
            {
                Geht = cZeiterfassung.GetZeileObjectFromZeileString(sr.ReadLine(), ";");
            }

            using(StreamWriter sw = new StreamWriter(sPath))
            {

            }

        }
    }
}

用于拆分和数组的辅助类:

namespace Prog
{
    public static class cZeiterfassung
    {
        public static cZeile GetZeileObjectFromZeileString(string Zeile, string Trenner)
        {
            cZeile ZeileReturn = new cZeile();
            string[] separators = { Trenner };
            string[] arZeile = Zeile.Split(separators, StringSplitOptions.None);

            ZeileReturn.ID = arZeile[0];
            if (arZeile[1].IndexOf("\\") != -1)
            {
                ZeileReturn.Domain = arZeile[1].Substring(0, arZeile[1].IndexOf("\\"));
                if (arZeile[1].Length >= arZeile[1].IndexOf("\\"))
                    ZeileReturn.User = arZeile[1].Substring(arZeile[1].IndexOf("\\") + 1);
            }
            else
                ZeileReturn.User = arZeile[1];
            ZeileReturn.Datum = arZeile[2];
            ZeileReturn.Kommt = arZeile[3];
            ZeileReturn.Geht = arZeile[4];

            if(!string.IsNullOrEmpty(arZeile[2]))
                ZeileReturn.dtDatum = Convert.ToDateTime(arZeile[2]);
            if(!string.IsNullOrEmpty(arZeile[3]))
            ZeileReturn.dtKommt = Convert.ToDateTime(arZeile[3]);
            if (!string.IsNullOrEmpty(arZeile[4]))
                ZeileReturn.dtGeht = Convert.ToDateTime(arZeile[4]);
            return ZeileReturn;

        }
    }//cZeiterfassung
    public class cZeile
    {
        public string ID { get; set; }
        public string Domain { get; set; }
        public string User { get; set; }
        public string Datum { get; set; }
        public string Kommt { get; set; }
        public string Geht { get; set; }
        public DateTime dtDatum { get; set; }
        public DateTime dtKommt { get; set; }
        public DateTime dtGeht { get; set; }
        public string Dauer { get; set; }
    }
}

2 个答案:

答案 0 :(得分:0)

我不太清楚指出您要从代码中做什么,但是要从您提出的问题中指出: 如果您要查找特定行,我会仔细检查每一行

string Data = "";
using(StreamReader Sr = new StreamReader(Path))
{
    while(!Sr.EndOfStream())
    {
        string UseMe = Sr.ReadLine();
        Data += UseMe;        
    }
}

现在您只需验证每一行。使用数据字符串,我为您提供了将每一行构建为一个字符串的可能性

希望我能为您提供帮助,否则请直接与我联系(我也会说德语,我想这对您来说比较容易)

答案 1 :(得分:0)

如果文件不大,建议您使用新数据写入新文件。

这是主意

            string[] lines = File.ReadAllLines(sPath);
            for (int i = 0; i < lines.Length; i++)
            {
                if (lines[i].IndexOf(";;") != -1)
                {
                    lines[i] = lines[i].Insert(line.IndexOf(";;"), "xxx");
                }
            }
            File.WriteAllLines(sPathTemp, lines);