Как мне написать по определенному индексу строки? - PullRequest
0 голосов
/ 12 сентября 2018

Добрый день, 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 голосов
/ 12 сентября 2018

Если ваш файл не большой, я предлагаю вам записать в новые файлы новые данные.

Это идея

            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);    
0 голосов
/ 12 сентября 2018

Я не могу точно указать, что вы пытаетесь сделать из своего кода, но из вопроса, который вы задали: я бы посмотрел каждую строку, если вы ищете конкретную строку

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

Теперь вы можете просто проверить каждую строку.С помощью строки данных я дал вам возможность построить каждую строку в одну строку

Я надеюсь, что смогу помочь вам, в противном случае свяжитесь со мной напрямую (я также говорю по-немецки, я думаю, это проще для вас)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...