2 / 2 / 5
Регистрация: 25.08.2015
Сообщений: 129
1

Чтение текста построчно из .txt

26.01.2016, 10:55. Показов 1512. Ответов 12
Метки нет (Все метки)

Есть файл .txt и вот его содержимое:
Код
http://site.ru/file1.rar Nazvanie1
http://site.ru/file2.rar Nazvanie2
нужно что бы программа вытягивала первую строчку(ссылку) и текст
и вставляла в checkedListBox1, следовательно, название в checkedListBox`е будет выводиться Nazvanie1 и Nazvanie2,
если выбрать Nazvanie1 то в нем должна содержаться ссылка site .ru/file1.rar, аналогично и с Nazvanie2.

В дальнейшем ссылок в файле .txt будет много и через не большое время будут добавляться новые, что бы каждый раз не обновлять программу, а что бы программа автоматически считывала строки из .txt и выводила их в checkedListBox1

Не по теме:

В итоге хочу сделать что бы при выборе строк из checkedListBox1, пользователь мог выбрать нужное и после скачать, дальнейший код с загрузкой я почти сделал, но он скачивает разом все выбранные файлы, а нужно будет додумать как сделать в плане очереди, но это пока что не главное..

__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.01.2016, 10:55
Ответы с готовыми решениями:

Чтение txt через пробел и построчно в C#
Мне необходимо считать текст таким образом, чтобы в матрицу заносились слова таким образом: в...

Чтение и замена текста в txt
Привет! Стоит такая задача, открытие файла(openfiledialog), чтение его и замена текста. На форуме...

Чтение .txt построчно в MFC
Добрый день уважаемые форумчане! Второй день уже мучаюсь - не могу понять, как считать строку из...

Чтение txt файла построчно!
Возможно повторюсь, но вопрос вполне конкретен! Нужно, что бы при запуске программы автоматически...

12
Эксперт .NETАвтор FAQ
10262 / 5003 / 1814
Регистрация: 11.01.2015
Сообщений: 6,206
Записей в блоге: 34
26.01.2016, 13:02 2
Лучший ответ Сообщение было отмечено Даценд как решение

Решение

Цитата Сообщение от therud Посмотреть сообщение
что бы программа автоматически считывала строки из .txt и выводила их в checkedListBox1
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Windows.Forms;
 
namespace WindowsFormsApplication327
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
 
            //generate test
            var test = 
@"http://site.ua/file1.rar Nazvanie1
http://site.ua/file2.rar Nazvanie2";
            File.WriteAllText("c:\\temp.txt", test);
 
            //load links from file
            var links = Links.Load("c:\\temp.txt");
 
            //create checklistbox
            var clb = new CheckedListBox {Parent = this};
            clb.Items.AddRange(links.ToArray());
            
            //open checked
            new Button {Parent = this, Text = "Open checked", Left = 200, Width = 150}.Click += delegate
            {
                foreach (var item in clb.CheckedItems)
                    Process.Start((item as Link).Path);
            };
        }
    }
 
    class Link
    {
        public string Path { get; set; }
        public string Name { get; set; }
 
        public override string ToString()
        {
            return Name;
        }
 
        public static Link Parse(string s)
        {
            var parts = s.Split(' ');
            return new Link {Path = parts[0], Name = parts[1]};
        }
    }
 
    class Links : List<Link>
    {
        public static Links Load(string filePath)
        {
            var res = new Links();
            foreach (var line in File.ReadAllLines(filePath))
            if(!string.IsNullOrEmpty(line))
                res.Add(Link.Parse(line));
 
            return res;
        }
    }
}
2
2 / 2 / 5
Регистрация: 25.08.2015
Сообщений: 129
26.01.2016, 13:49  [ТС] 3
Storm23, тут вроде на оборот, сохраняется в txt, а нужно вытаскивать из txt и вставлять в чекбокс)

Добавлено через 8 минут
Извиняюсь, проверяю код, оказывается, он обновляет текстовый документ, при каждом запуске.. строка:
C#
1
var test
0
Модератор
Эксперт .NET
5812 / 4689 / 2940
Регистрация: 20.04.2015
Сообщений: 8,359
26.01.2016, 14:13 4
therud,
Строки 15-19 можете не использовать. Файл создайте сами один раз.
1
2 / 2 / 5
Регистрация: 25.08.2015
Сообщений: 129
26.01.2016, 14:18  [ТС] 5
Единственное что я не могу сделать, кнопку и checkedListBox1
код их сам создает, а мне бы сделать через элементы и подстроить под себя, сижу кручу верчу, а переделать под элементы не выходит..
0
Модератор
Эксперт .NET
5812 / 4689 / 2940
Регистрация: 20.04.2015
Сообщений: 8,359
26.01.2016, 14:41 6
Если CheckedListBox уже создан с помощью конструктора и имя его сheckedListBox1, то вместо
C#
1
2
3
//create checklistbox
var clb = new CheckedListBox {Parent = this};
clb.Items.AddRange(links.ToArray());
Просто:
C#
1
сheckedListBox1.Items.AddRange(links.ToArray());
Если же кнопка создана конструктором и называется она button1, то вместо строк 28-33 создайте обработчик клика по ней и поместите в него код:
C#
1
2
3
4
5
private void button1_Click(object sender, EventArgs e)
{
   foreach (var item in сheckedListBox1.CheckedItems)
      Process.Start((item as Link).Path);
}
2
2 / 2 / 5
Регистрация: 25.08.2015
Сообщений: 129
26.01.2016, 15:33  [ТС] 7
Storm23, Даценд, От души прям, огромное вам спасибо за ваш труд в помощи, без вас я бы не справился!

Добавлено через 1 минуту
Чуть не забыл, прикреплю готовый вариант на всякий случай
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Diagnostics;
using System.IO;
 
 
namespace WindowsFormsApplication7
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            //load links from file
            var links = Links.Load(@"C:\1.txt");
            //create checklistbox
            checkedListBox1.Items.AddRange(links.ToArray());
        }
 
        private void button1_Click(object sender, EventArgs e)
        {
            foreach (var item in checkedListBox1.CheckedItems)
            Process.Start((item as Link).Path);
        }
    }
 
    class Link
    {
        public string Path { get; set; }
        public string Name { get; set; }
 
        public override string ToString()
        {
            return Name;
        }
 
        public static Link Parse(string s)
        {
            var parts = s.Split(' ');
            return new Link { Path = parts[0], Name = parts[1] };
        }
    }
 
    class Links : List<Link>
    {
        public static Links Load(string filePath)
        {
            var res = new Links();
            foreach (var line in File.ReadAllLines(filePath))
                if (!string.IsNullOrEmpty(line))
                    res.Add(Link.Parse(line));
 
            return res;
        }
    }
}
Добавлено через 41 минуту
Не думал что возникнут проблемы с кириллицей, но ошибка выходит:
C#
1
var links = Links.Load(@"C:\1.txt", Encoding.Default);
Ошибка CS1501 Ни одна из перегрузок метода "Load" не принимает 2 аргументов.
0
Модератор
Эксперт .NET
5812 / 4689 / 2940
Регистрация: 20.04.2015
Сообщений: 8,359
26.01.2016, 16:00 8
Цитата Сообщение от therud Посмотреть сообщение
Ни одна из перегрузок метода "Load" не принимает 2 аргументов.
Можете, конечно, вид кодировки в метод Load передавать, создав такую перегрузку метода:
C#
1
2
3
4
5
6
7
8
public static Links Load(string filePath, Encoding encoding)
{
    var res = new Links();
    foreach (var line in File.ReadAllLines(filePath, encoding))
        if (!string.IsNullOrEmpty(line))
            res.Add(Link.Parse(line));
    return res;
}
Но если будете работать всегда с одной и той же кодировкой, то просто в своем коде подправьте строку 50:
C#
1
foreach (var line in File.ReadAllLines(filePath, Encoding.Default))
1
2 / 2 / 5
Регистрация: 25.08.2015
Сообщений: 129
26.01.2016, 19:30  [ТС] 9
Цитата Сообщение от Даценд Посмотреть сообщение
Но если будете работать всегда с одной и той же кодировкой
Работать буду с двумя кодировками, не особо понял в чем разница двух кодов, так как одного добавления "Encoding.Default" в
C#
1
foreach (var line in File.ReadAllLines(filePath, Encoding.Default))
было достаточно, что бы работало в двух кодировках

Добавлено через 1 час 24 минуты
Извините, понимаю что не по теме, осталось последнее решение и наконец все будет готово.
на данный момент ссылки берущиеся из .txt файла, открываются в браузере, а нужна загрузку через программу с помощью WebClient, не совсем получается подогнать под готовый код, который выше
C#
1
2
3
4
string link = @"http://site.ru/1.rar"; //ссылка
string downloadFileName = Path.GetFileName(link); //Имя файла
WebClient webClient = new WebClient();
webClient.DownloadFileAsync(new Uri(link), folderBrowserDialog1.SelectedPath + "" + downloadFileName);
Добавлено через 1 час 38 минут
жесть, вообще код понять не могу как он устроен
0
Модератор
Эксперт .NET
5812 / 4689 / 2940
Регистрация: 20.04.2015
Сообщений: 8,359
26.01.2016, 19:46 10
Попробуйте так:
C#
1
2
3
4
5
6
7
8
9
10
private void button1_Click(object sender, EventArgs e)
{
    foreach (var item in checkedListBox1.CheckedItems)
    {
        string link = (item as Link).Path; //ссылка
        string downloadFileName = Path.GetFileName(link); //Имя файла
        WebClient webClient = new WebClient();
        webClient.DownloadFileAsync(new Uri(link), folderBrowserDialog1.SelectedPath + "" + downloadFileName);
    }
}
1
2 / 2 / 5
Регистрация: 25.08.2015
Сообщений: 129
26.01.2016, 20:38  [ТС] 11
Даценд, спасибо
0
2 / 2 / 5
Регистрация: 25.08.2015
Сообщений: 129
28.01.2016, 10:04  [ТС] 12
Цитата Сообщение от therud Посмотреть сообщение
var links = Links.Load(@"C:\1.txt");
Как эту строку переделать под URL? пишет что нельзя вписывать url
дело в том, что добавил файл .txt на сервер, подключиться теперь бы к нему по url
0
Модератор
Эксперт .NET
5812 / 4689 / 2940
Регистрация: 20.04.2015
Сообщений: 8,359
28.01.2016, 11:22 13
therud,
попробуйте так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
public static Links Load(string url)
{
    WebClient webClient = new WebClient();
    string tempFile = @"tmpFile.txt";
    webClient.DownloadFile(url, tempFile);
    var res = new Links();
    foreach (var line in File.ReadAllLines(tempFile, Encoding.Default))
        if (!string.IsNullOrEmpty(line))
            res.Add(Link.Parse(line));
    File.Delete(tempFile);
    return res;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.01.2016, 11:22

Чтение из .txt построчно (ifstream)
Здравствуйте, возникли некоторые проблемы с ifstream. Не могу сделать чтение из .тхт файла...

Чтение из файла .txt построчно в разные textbox
Добрый день! У меня такая проблема: посмотрев множество сайтов я не нашел ответ на интересующий...

Чтение txt файла построчно с поиском информации
Пересмотрел все варианты такого вопроса на форуме, ответа для себя не нашел, или не понял... ...

Чтение текста построчно
Добрый день! Хочу попросить вашей помощи. На данный момент я учусь работать с текстом в visual...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.