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

问题描述 投票:0回答:2

美好的一天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))
            {

            }

        }
    }
}

用于拆分和数组的Helperclass:

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; }
    }
}
c# asp.net streamreader streamwriter
2个回答
0
投票

我不能完全指出你想从你的代码做什么,但是从你问的问题:如果你正在寻找一个特定的行,我会调查每一行

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

现在你可以验证每一行。使用数据字符串,我可以将每行构建成一个字符串

我希望我可以帮助你,否则直接联系我(我也会说德语我想这对你来说更容易)


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);    
© www.soinside.com 2019 - 2024. All rights reserved.