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

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

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

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

Есть файл — 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 минут
Так же пробел может быть не один
Code
1
2
a      b
b      a
Смысл в том что в каждой строке будет только два слова между которыми может быть как один пробел или несколько табуляций..
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.05.2015, 01:48
Ответы с готовыми решениями:

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

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

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

11
 Аватар для Adadjio
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
28.05.2015, 13:24
Если знаете имена переменных то можно реализовать так:
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
 Аватар для programmer403
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
28.05.2015, 17:49  [ТС]
Нет не то, дело в том что имя вводится любое в файл и присвоение тоже.
Это может быть переменная с целой строкой слов
Code
1
2
perem1 Привет я перем1
perem2      da da da
Тут первое слово всегда имя переменной, ее нужно получить отдельно и потом с ее значением сделать тоже самое
0
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
28.05.2015, 17:55
programmer403, А почему в хамел не добавить и по тегам уже записывать в первое значение perem1 а во второй тег его значение Привет я перем1 Увы подромно рассказать не могу просто читал что можно пользоваться хамелом как базой
0
 Аватар для programmer403
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
28.05.2015, 18:03  [ТС]
Не я записываю, мне дают файл который я должен разобрать.
В нем первое слово всегда одно а после него какой-то текст в одну или пару слов.

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

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

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

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

Code
1
2
perem1 Текст второй нужно отправить в perem1, а первый в perem2
perem2 Текст первый
Добавлено через 2 минуты
Этот код
C#
1
dic.Add(str.Split(' ')[0].Trim(), str.Split('\n')[1].Trim());
Оставляет только два слова (первое и второе)
Code
1
perem1 Текст
остальной текст "второй нужно отправить в perem1, а первый в perem2" просто пропадает
0
В поиске
103 / 51 / 17
Регистрация: 20.04.2014
Сообщений: 826
28.05.2015, 18:46
Лучший ответ Сообщение было отмечено 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
 Аватар для programmer403
1 / 1 / 1
Регистрация: 24.09.2013
Сообщений: 25
28.05.2015, 18:51  [ТС]
Все понял, спасибо!
0
 Аватар для Adadjio
61 / 61 / 32
Регистрация: 30.07.2013
Сообщений: 178
28.05.2015, 21:51
В 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.05.2015, 21:51
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru