Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
1

Поменять местами значения в файле, чтобы переменные остались на своих местах

28.05.2015, 01:48. Показов 2224. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Условия таковы:

Есть файл — filename.txt
Который содержит в себе допустим следующее:

param1 param2
param2 param1
param3 param3
param4 param4
Тут что-то вроде присвоения. 1е это имя переменной, а после пробела её значение.

Задача: Поменять местами значения, чтобы переменные остались на своих местах.

Вот не могу сделать так чтобы первое слово не трогать, а поменять только второе.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
string str = string.Empty;
 
            using (StreamReader reader = File.OpenText("filename.txt"))
            {
                str = reader.ReadToEnd();
            }
 
            str = str.Replace("param2", "param1");
            str = str.Replace("param4", "param3");
 
            using (System.IO.StreamWriter file = new System.IO.StreamWriter("filename.txt"))
            {
                file.Write(str);
            }
Добавлено через 2 часа 25 минут
Так же пробел может быть не один
Код
a      b
b      a
Смысл в том что в каждой строке будет только два слова между которыми может быть как один пробел или несколько табуляций..
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.05.2015, 01:48
Ответы с готовыми решениями:

Поменять местами значения целых переменных х и у, не используя дополнительные переменные
Ребят, срочно нужна помощь. Нужно сделать программу в windows forms. Нужно использовать 2 textbox и...

Поменять местами элементы массива, стоящие на четных местах, с элементами, стоящими на нечетных местах
В заданном одномерном массиве поменять местами соседние элементы, стоящие на четных местах, с...

Значения переменных А, В, С поменять местами так, чтобы оказалось А>=В>=С
Значения переменных А, В, С поменять местами так, чтобы оказалось А>=В>=С. Переменные А, В, С...

Значения переменных А, В, С поменять местами так, чтобы оказалось А>=В>=С
Вот задача: Значения переменных А, В, С поменять местами так, чтобы оказалось А>=В>=С. Переменные...

11
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
28.05.2015, 13:24 2
Если знаете имена переменных то можно реализовать так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 Dictionary<string, string> dic = new Dictionary<string, string>();
// Считываем файл
            using (StreamReader s = File.OpenText("filename.txt"))
            {
                string str;
                while (true)
                {
                    str = s.ReadLine();
                    if (str == null) break;
                    dic.Add(str.Split(' ')[0].Trim(), str.Split(' ')[1].Trim());
                }
            }
// В этом месте изменяете нужные вам значения переменных
            dic["param1"] = "1";
// перезаписываем файл
            using (StreamWriter sw =  new  StreamWriter("filename.txt", false))
            {
                for (int i = 0; i < dic.Count; i++)
                {
                    string s = dic.Keys.ToList()[i].ToString() + " " + dic.Values.ToList()[i].ToString();
                    sw.WriteLine(s);
                }
            }
0
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
28.05.2015, 17:49  [ТС] 3
Нет не то, дело в том что имя вводится любое в файл и присвоение тоже.
Это может быть переменная с целой строкой слов
Код
perem1 Привет я перем1
perem2      da da da
Тут первое слово всегда имя переменной, ее нужно получить отдельно и потом с ее значением сделать тоже самое
0
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 812
28.05.2015, 17:55 4
programmer403, А почему в хамел не добавить и по тегам уже записывать в первое значение perem1 а во второй тег его значение Привет я перем1 Увы подромно рассказать не могу просто читал что можно пользоваться хамелом как базой
0
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
28.05.2015, 18:03  [ТС] 5
Не я записываю, мне дают файл который я должен разобрать.
В нем первое слово всегда одно а после него какой-то текст в одну или пару слов.

Содержание в файле достаточно большое чтобы вручную переписывать.

Мне удалось убрать лишние пробелы между словами, поставил один.

Осталось из такого файла:
Код
perem1 Текст первый
perem2 Текст второй нужно отправить в perem1, а первый в perem2
Получить следующее:
Код
perem1 Текст второй нужно отправить в perem1, а первый в perem2
perem2 Текст первый
0
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 812
28.05.2015, 18:10 6
programmer403, А не прокатит такое в выше написанном примере
C#
1
dic.Add(str.Split(' ')[0].Trim(), str.Split('\n')[1].Trim());
это так полет фантазии или вместо 1 тоже ноль написать если грамотнее быть скорее всего там ноль нужен
0
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
28.05.2015, 18:15  [ТС] 7
Сейчас попробую, а как их потом местами поменять?
0
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 812
28.05.2015, 18:19 8
programmer403, кого?
str.Split(' ')[0].Trim(), я если правельно понимаю это до первого пробела а
str.Split(' ')[1].Trim() до второго пробела я просто вместо пробела написал \n элемент перехода на новую строчку а 1 то не трогал логически str.Split('\n')[0].Trim() типо до первого пробела и до первого перехода на новую строчку. Но опять это так чисто ради что нить сказать так как я в этом вообще ни чего не понимаю))
0
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
28.05.2015, 18:24  [ТС] 9
Смотрите, вот что мне нужно

Файл на входе содержит следующее:
Код
perem1 Текст первый
perem2 Текст второй нужно отправить в perem1, а первый в perem2
При выходе нужно получить следующее:

Код
perem1 Текст второй нужно отправить в perem1, а первый в perem2
perem2 Текст первый
Добавлено через 2 минуты
Этот код
C#
1
dic.Add(str.Split(' ')[0].Trim(), str.Split('\n')[1].Trim());
Оставляет только два слова (первое и второе)
Код
perem1 Текст
остальной текст "второй нужно отправить в perem1, а первый в perem2" просто пропадает
0
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 812
28.05.2015, 18:46 10
Лучший ответ Сообщение было отмечено programmer403 как решение

Решение

dic.Add(str.Split(' ')[0].Trim(), str.Split('\n')[0].Trim());

и ни что не пропадет

Добавлено через 49 секунд
а вот как вам их местами поменять пока на ум ни чего не приходит
+ у меня с русским почему то не воспринимает

Добавлено через 2 минуты
programmer403,
Сделанно на коленке немного не так как вы хотите но примерно в эту сторону смотрите

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
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Dictionary<string, string> dic = new Dictionary<string, string>();
            // Считываем файл
            using (StreamReader s = File.OpenText("filename.txt"))
            {
                string str;
                while (true)
                {
                    str = s.ReadLine();
                    if (str == null) break;
                    dic.Add(str.Split(' ')[0].Trim(), str.Split('\n')[0].Trim());
                }
            }
 
            string переменная = dic["perem1"];
            string переменная1 = dic["perem2"];
            //dic["perem2"] = dic["param2"];
 
            dic.Keys.ToList()[0] = переменная1;
            dic.Keys.ToList()[1] = переменная;
            // перезаписываем файл
            using (StreamWriter sw = new StreamWriter("filename.txt", false))
            {
                for (int i = 0; i < dic.Count; i++)
                {
                    string s = dic.Keys.ToList()[i].ToString() + " " + dic.Values.ToList()[i].ToString();
                    sw.WriteLine(s);
                }
            }
        }
    }
}
Щаз уже ближе к тому что вы хотите
0
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
28.05.2015, 18:51  [ТС] 11
Все понял, спасибо!
0
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
28.05.2015, 21:51 12
В dictionary лучше добавлять строки таким образом:
C#
1
2
3
4
5
6
while (true)
                {
                    str = s.ReadLine();
                    if (str == null) break;
                    dic.Add(str.Split(' ')[0].Trim(), str.Substring(str.Split(' ')[0].Trim().Length).Trim());
                }
Потому что
C#
1
str.Split('\n')[0].Trim()
захватывает, так же, и первое слово.
1
28.05.2015, 21:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.05.2015, 21:51
Помогаю со студенческими работами здесь

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

В заданном массиве поменять местами значения, стоящие на симметричных, относительно центра, местах
В заданном массиве поменять местами значения, стоящие на симметричных, относительно центра, местах....

Поменять местами переменные так, чтобы они оказались упорядоченными по убыванию
Всем доброго времени суток. Нужна помощь с заданиями. Сам не могу сделать, потому что нет...

Поменять местами значения целых переменных x и y, не используя дополнительные переменные
Поменять местами значения целых переменных x и y, не используя дополнительные переменные.


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru