【问题标题】:How do I write at a specific index of a line?如何在行的特定索引处写入?
【发布时间】:2019-02-17 03:39:48
【问题描述】:

早安 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; }
    }
}

【问题讨论】:

  • 你的文件大吗?
  • line = line.Replace(";;", ";something;");

标签: c# asp.net streamreader streamwriter


【解决方案1】:

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

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

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

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

【讨论】:

  • 抱歉,我的解释确实不准确。 ^^ 20180912_0149;KIV\vischer;12.09.2018;01:49;;这是一条线。我需要在这些之间写一些东西;;
  • 没关系 - 如果您需要进一步的帮助,我会尝试调整我的答案
【解决方案2】:

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

这就是想法

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-07
    • 2019-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-11
    • 2019-10-06
    相关资源
    最近更新 更多