c# удаление строки из файла

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
Всем привет, подскажите как кодом c# удалить первую строку из файла ( не из списка).
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 576
Благодарностей
9 189
Баллы
113
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
спасибо, но мне нужно взять без удаления и потом, в случае совпадения строк, удалить эту строку
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 576
Благодарностей
9 189
Баллы
113
спасибо, но мне нужно взять без удаления и потом, в случае совпадения строк, удалить эту строку
Можете брать строку этим способом без удаления.
А если понадобиться удалить, то просто повторяете выполнение кода, но уже с true.
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
так почему-то не работает, пробовал
 

Sergodjan

Administrator
Команда форума
Регистрация
05.09.2012
Сообщения
20 576
Благодарностей
9 189
Баллы
113
  • Спасибо
Реакции: impul5e

artsmm

Client
Регистрация
03.10.2018
Сообщения
1 136
Благодарностей
196
Баллы
63
Всем привет, подскажите как кодом c# удалить первую строку из файла ( не из списка).
Привет. Так можно:
C#:
IZennoList MyList = project.Lists["MyList"];
string LoneTxt = MyList[0];
//Будет всегда браться только первая строка, без сортировки и без удаления
//Если потом нужно будет добавить удаление, то добавляем:
MyList.RemoveAt(0);
//Если нужно, чтобы была сортировка и файл не оставался пустым, то:
MyList.Add(LoneTxt);
Если инфа в каком-то txt файле находится, то его можно подцепить как список к проекту
 
  • Спасибо
Реакции: Sergodjan и impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
Помогите еще такой код дописать:
C#:
string text = List2[0]; 

for (int i = 0; i < list.Count; i++) {
    string str = list[i].Split(';')[1];
    string a = list[i].Split(';')[0];
    if (str == text)
        return a;
            list1.Add(a);
            List2.RemoveAt(0);
}
В этом код мы берем первую строку из списка, например токен 7u2h3rgy, потом перебираем все строки второго списка в поисках совпадения, если находит совпадение - нужно выпарсить e-mail из строки вида [email protected];7u2h3rgy и этот e-mail добавить в третий список. Но вместо этого этот код делает так:
он добавляет в список все имейлы до той строки в которой найдено совпадение. То есть если совпадение найдено в 50-ой строке, то добавляет строки 1-49. Буду благодарен за помощь.
 

alex8020

Client
Регистрация
16.08.2016
Сообщения
38
Благодарностей
39
Баллы
18
C#:
string text = List2[0];

for (int i = 0; i < list.Count; i++) {
    string str = list[i].Split(';')[1];
    string a = list[i].Split(';')[0];
    if (str == text)
        list1.Add(a);
}
List2.RemoveAt(0);
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
В общем, поставленная задача так и не была решена. Излагаю еще раз и буду благодарен, если кто-нибудь поможет:

есть список токенов, и есть список email;token, нужно пройтись по списку токенов, собрать email'ы соответствующие этим токенам и добавить в третий список
на скрине видно как это должно быть:

 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 423
Баллы
113
C#:
string path1 = @"C:\Users\akolb\OneDrive\Desktop\pairs.txt";//список пар мыло;токен
string path2 = @"C:\Users\akolb\OneDrive\Desktop\tokens.txt";//список токенов
string path3 = @"C:\Users\akolb\OneDrive\Desktop\mails.txt";//список мыл
string[] pairs = File.ReadAllLines(path1);
string[] tokens = File.ReadAllLines(path2);
List<string> mails = new List<string>();
foreach(string pair in pairs){
    project.SendInfoToLog(pair,true);
    if(tokens.Contains(pair.Split(';')[1]))
        mails.Add(pair.Split(';')[0]);
}
File.WriteAllLines(path3, mails, Encoding.UTF8);
 
  • Спасибо
Реакции: impul5e и paska

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
C#:
string path1 = @"C:\Users\akolb\OneDrive\Desktop\pairs.txt";//список пар мыло;токен
string path2 = @"C:\Users\akolb\OneDrive\Desktop\tokens.txt";//список токенов
string path3 = @"C:\Users\akolb\OneDrive\Desktop\mails.txt";//список мыл
string[] pairs = File.ReadAllLines(path1);
string[] tokens = File.ReadAllLines(path2);
List<string> mails = new List<string>();
foreach(string pair in pairs){
    project.SendInfoToLog(pair,true);
    if(tokens.Contains(pair.Split(';')[1]))
        mails.Add(pair.Split(';')[0]);
}
File.WriteAllLines(path3, mails, Encoding.UTF8);
Это гениально! Работает! Спасибо!
 

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
C#:
string path1 = @"C:\Users\akolb\OneDrive\Desktop\pairs.txt";//список пар мыло;токен
string path2 = @"C:\Users\akolb\OneDrive\Desktop\tokens.txt";//список токенов
string path3 = @"C:\Users\akolb\OneDrive\Desktop\mails.txt";//список мыл
string[] pairs = File.ReadAllLines(path1);
string[] tokens = File.ReadAllLines(path2);
List<string> mails = new List<string>();
foreach(string pair in pairs){
    project.SendInfoToLog(pair,true);
    if(tokens.Contains(pair.Split(';')[1]))
        mails.Add(pair.Split(';')[0]);
}
File.WriteAllLines(path3, mails, Encoding.UTF8);
Подскажи, как правильно сделать, чтобы e-mail'ы дописывались в список, а не перезаписывались?
пытаюсь сделать так?
File.AppendAllLines(path3, Environment.NewLine + mails, Encoding.UTF8-);
но выскакивает ошибка
"преобразование типа из "string" в "System.Collections.Generic.IEnumerable<string>" невозможно""
 

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 423
Баллы
113
C#:
string path1 = @"C:\Users\akolb\OneDrive\Desktop\pairs.txt";//список пар мыло;токен
string path2 = @"C:\Users\akolb\OneDrive\Desktop\tokens.txt";//список токенов
string path3 = @"C:\Users\akolb\OneDrive\Desktop\mails.txt";//список мыл
string[] pairs = File.ReadAllLines(path1);
string[] tokens = File.ReadAllLines(path2);
List<string> mails = new List<string>(File.ReadAllLines(path3).ToList());//занесем во временный список уже собранные мыла
foreach(string pair in pairs){
    if(tokens.Contains(pair.Split(';')[1]))
        if(!mails.Contains(pair))//и будем добавлять в него только те мыла, которых нет. Так избавимся от возможности появления дублей
            mails.Add(pair.Split(';')[0]);
}
File.WriteAllLines(path3, mails, Encoding.UTF8);//и все-таки перезапишем файл в конце
или просто поменяйте последнюю строчку в прошлом коде на эту File.AppendAllLines(path3, mails.ToList(), Encoding.UTF8); для простого добавления
 
  • Спасибо
Реакции: impul5e

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
или просто поменяйте последнюю строчку в прошлом коде на эту File.AppendAllLines(path3, mails.ToList(), Encoding.UTF8); для простого добавления
там нужно пустую строку добавить в начале потому, что потом первую строку добавляет в конец последней существующей строки, то есть выглядит так:
[email protected][email protected]
 
Последнее редактирование:

impul5e

Client
Регистрация
15.08.2017
Сообщения
202
Благодарностей
40
Баллы
28
Получилось! Просто добавил
File.AppendAllText(path3, Environment.NewLine, Encoding.UTF8-);
перед началом парсинга
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)