В программе существует такая же переменная abc. Нужно прочитать файл (123.txt), найти переменную эту в файле (abc) и записать её значение в программу (переменная в программе: abc). Я пока что нашёл только такой код, чтобы найти строку, в которой есть данная переменная abc
StreamReader str = new StreamReader(Application.StartupPath + $»/123.txt», Encoding.Default); while (!str.EndOfStream) < string st = str.ReadLine(); if (st.StartsWith(«abcToProgramm»)) //переменная, которая в программе написана < Variable.abc = st; //класс Variable, в котором существует данная переменная break; >>
Но в данном случае копируется вся строка, в мне нужно только значение. Помогите, пожалуйста. Если что, ниже тот самый класс, который написан в программе:
namespace Variable < public static class Variable < public const int abc; >>
Отслеживать
задан 3 мая 2020 в 22:26
1,282 6 6 серебряных знаков 18 18 бронзовых знаков
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Вот так можно попробовать
ЧТО ТАКОЕ ПЕРЕМЕННАЯ В C# | ОБЪЯВЛЕНИЕ И ИНИЦИАЛИЗАЦИЯ ПЕРЕМЕННЫХ | ПРИСВОЕНИЕ ЗНАЧЕНИЙ | C# Урок #4
string text = File.ReadAllText(Application.StartupPath + $»/123.txt»); string search = «abc =»; text = text.Substring(text.IndexOf(search) + search.Length); text = text.Remove(text.IndexOf(«rn»)); // rn — перенос строки if (text.Contains(«;»)) text = text.Remove(text.IndexOf(«;»)); if (int.TryParse(text.Trim(), out int num)) < Console.WriteLine(«Найдено abc: » + num); Variable.abc = num; >else
Отслеживать
ответ дан 3 мая 2020 в 23:26
46k 5 5 золотых знаков 22 22 серебряных знака 52 52 бронзовых знака
Спасибо, помогло! А можно как-то число «5» во второй строке вычислять автоматически? Например, сделать метод, в котором во второй строке: text = text.Substring(text.IndexOf(переменная на вход в методе) + количество символов в переменной на входе);
3 мая 2020 в 23:40
3 мая 2020 в 23:43
Я только что посидел и сам точно такой же код написал. Спасибо огромное. Как же сложно начинать учить язык программирования.
3 мая 2020 в 23:47
- File.ReadAllLines(«Test.txt») — читаем файл как массив строк.
- .FirstOrDefault(x => x.Contains(«abc»)) — из полученного файла берем ту строку, которая содержит abc . Тут есть пару но — если у вас надо найти определенный тип, то стоит дописать условие, если таких переменных много и они расположены в разных методах например, то тоже придется дописать! Данный вариант просто берет строку в надежде, что она у нас одна.
- ? — Если предыдущий вызов не дал NULL , то мы выполняем код дальше, иначе пропускаем и выдаем NULL в результат.
- .Split(new[] < ‘=’, ‘;’ >, StringSplitOptions.RemoveEmptyEntries) — разбиваем полученную строку по = и ; — это даст нам строковой массив, где первым значением будет все до = , вторым все после (но до ; ), а 3-м все после ; . Так, как после ; обычно у нас пустота (я надеюсь, что она у вас там), то мы убираем эту пустоту при помощи StringSplitOptions.RemoveEmptyEntries .
- .LastOrDefault(); — берем из полученного массива последнее значение. Если у вас после ; есть что-то еще, то тут строит наверно брать 2-е значение (то, что строго после = ).
В findValue у нас будет string значение с необходимым числом, либо NULL , если такого нет. Остается нам это число преобразовать в правильный формат, int и делает это
Python для начинающих. Как работают переменные в Python. #2
int.TryParse(findValue, out int result)
Он вернет нам bool значение, где true — удалось преобразовать, а false — нет. Само значение он отдаст через out .
Источник: ru.stackoverflow.com
Извлечение переменных и их адресов в памяти?
Как получить список всех переменных и их адреса в памяти из чужого другого процесса или запущенной игры и изменить их. Короче, как реализовать на c++ программу как artmany.
- Вопрос задан более трёх лет назад
- 686 просмотров
1 комментарий
Простой 1 комментарий
Список переменных никак(если речь про C++)
Решения вопроса 1
Делаешь дамп памяти процесса и смотришь, какие области памяти содержат нужное значение. Проверяешь догадку. Проверяешь, не выделяется ли память динамически, возможно ищешь указатели на неё. Повторяешь для другого значения. В конце-концов получается карта памяти процесса.
Затем делаешь программу, которая через ReadProcessMemory/WriteProcessMemory или аналоги читает/пишет нужные значения по нужным адресам.
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 1
software engineer
«Как получить список всех переменных и их адреса в памяти из чужого другого процесса или запущенной игры»
Никак. Переменные не хранятся в памяти обычного процесса. Откомпилированная программа хранит данные по смещению адреса, а не по названию переменных.
«и изменить их.»
Найти процесс, обратиться к ячейке памяти по адресу и изменить. Нужны базовые знания С++ и немного гугла.
«Короче, как реализовать на c++ программу как artmany. »
Если вы внимательно пользовались artmoney, то как минимум могли бы
1. правильно написать ее название
2. Заметить, что ArtMoney не ищет никаких переменных — с ее помощью можно просто искать адреса в памяти, а потом уже найденным адресам присвоить что-то типа имени, но это именно то, что придумали вы, а не переменные внутри процесса.
Источник: qna.habr.com
Просмотр переменных с помощью окна контрольных значений и быстрой проверки
Область применения:Visual Studio
Visual Studio для Mac
Visual Studio Code
Во время отладки для просмотра переменных и выражений можно использовать окна контрольных значений и диалоговое окно Быстрая проверка. Окна доступны только во время сеанса отладки.
В окнах контрольных значений в процессе отладки могут отображаться несколько переменных. В диалоговом окне Быстрая проверка отображается одна переменная за раз. Его следует закрыть до того, как можно будет продолжить отладку. Дополнительные сведения об использовании окна «Быстрая проверка» см. в разделе Наблюдение за одной переменной или выражением с помощью быстрой проверки.
Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих и статью Методы и инструменты отладки.
Наблюдение за переменными с помощью окна контрольных значений
Можно открыть несколько окон контрольных значений и наблюдать за несколькими переменными в окне контрольных значений.
Например, чтобы организовать просмотр значений a , b и c , в следующем коде:
int main() < int a, b, c; a = 1; b = 2; c = 0; for (int i = 0; i < 10; i++) < a++; b *= 2; c = a + b; >return 0; >
- Установите точку останова на строке c = a + b; , щелкнув в левое поле, выбрав Отладка>Переключить точку останова или нажав клавишу F9.
- Начните отладку, выбрав зеленую стрелку Старт или выбрав Отладка>Начать отладку или нажав клавишу F5. Выполнение останавливается в точке останова.
- Откройте окно Контрольные значения, выбрав Отладка>Окна>Контрольные значения>Контрольные значения 1 или нажав клавиши CTRL+ALT+W>1. Вы можете открыть дополнительные окна контрольных значений, выбрав окна 2, 3 или 4.
- В окне Контрольные значения выберите пустую строку и тип переменной a . Сделайте то же самое для b и c .
Использование выражений в окне контрольных значений
В окне Контрольные значения можно просмотреть любое допустимое выражение, которое распознает отладчик.
Например, для кода, приведенного в предыдущем разделе, можно вычислить среднее трех значений, введя (a + b + c) / 3 в окне контрольных значений:
Правила вычисления выражений в окне Контрольные значения обычно аналогичны правилам вычисления выражений в используемом языке программирования. Если в выражении есть синтаксическая ошибка, должна произойти та же ошибка компилятора, которая возникла бы в редакторе кода. Например, опечатка в предыдущем выражении выдает следующую ошибку в окне Контрольные значения:
В окне Контрольные значения может появиться значок кружки с двумя волнистыми линиями. Он указывает на то, что отладчик не вычисляет выражение из-за возможной зависимости между потоками. Для оценки кода необходимо, чтобы другие потоки в приложении выполнялись временно, но, поскольку вы находитесь в режиме приостановки выполнения, все потоки в приложении обычно останавливаются. Разрешение временного запуска других потоков может привести к непредвиденным результатам в работе приложения, а также к тому, что отладчик будет игнорировать различные события, например точки останова и исключения, созданные в этих потоках.
Поиск в окне контрольных значений
Используя панель поиска над каждым окном, можно искать ключевые слова в столбцах «Имя», «Значение» и «Тип» в окне Контрольные значения. Нажмите клавишу ВВОД или щелкните одну из стрелок, чтобы выполнить поиск. Чтобы отменить текущий поиск, нажмите значок «x» на панели поиска.
Для перехода между найденными совпадениями используйте стрелки влево и вправо (SHIFT + F3 и F3 соответственно).
Чтобы сделать поиск более или менее детальным, воспользуйтесь раскрывающимся списком Поиск на уровень глубже в верхней части окна Контрольные значения, чтобы выбрать число уровней детализации поиска во вложенных объектах.
Закрепление свойств в окне контрольных значений
Эта возможность поддерживается в .NET Core 3.0 или более поздних версий.
С помощью средства Закрепляемые свойства можно быстро проверить объекты на основе их свойств в окне контрольных значений. Чтобы воспользоваться этим средством, наведите указатель мыши на свойство и выберите значок булавки либо щелкните правой кнопкой мыши и в контекстном меню выберите пункт Закрепить элемент в избранном. Свойство будет размещено в верхней части списка свойств объекта, а имя и значение свойства будут отображаться в столбце Значение. Чтобы открепить свойство, щелкните значок булавки еще раз или в контекстном меню выберите пункт Открепить элемент в избранном.
При просмотре списка свойств объекта в окне контрольных значений можно также включать и отключать отображение имен свойств и отфильтровывать незакрепленные свойства. Доступ к каждому параметру можно получить, нажимая кнопки на панели инструментов над окном контрольных значений.
Обновление контрольных значений
При вычислении выражения в окне Контрольные значения может отображаться значок обновления (круговая стрелка). Значок обновления указывает на ошибочные или устаревшие значения.
Чтобы обновить значение, щелкните значок обновления или нажмите клавишу ПРОБЕЛ. Отладчик попытается пересчитать выражение. Однако вы, возможно, не захотите или не сможете повторно вычислить выражение, в зависимости от того, почему значение не было вычислено.
Наведите указатель мыши на значок обновления или обратитесь к столбцу Значение, чтобы узнать причину, по которой выражение не было вычислено. Причины.
- При вычислении выражения возникла ошибка, как в предыдущем примере. Возможно, истекло время ожидания или переменная находится вне области действия.
- Выражение содержит вызов функции, который мог вызвать побочный эффект в приложении. См. раздел Побочные эффекты.
- Автоматическое вычисление свойств и неявные вызовы функций должны быть отключены.
Если значок обновления отображается ввиду того, что автоматическое вычисление свойств и неявные вызовы функций отключены, его можно включить, установив флажок Включить вычисление свойств и другие неявные вызовы функций в разделе Сервис>Параметры>Отладка>Общие.
Демонстрация использования значка обновления
- В разделе Сервис>Параметры>Отладка>Общие снимите флажок Включить вычисление свойств и другие неявные вызовы функций.
- Введите следующий код и в окне Контрольные значения задайте контрольное значение свойства list.Count .
static void Main(string[] args) < Listlist = new List(); list.Add(«hello»); list.Add(«goodbye»); >
Побочные эффекты выражения
Вычисление некоторых выражений может привести к изменению значения некоторой переменной или иным образом повлиять на состояние приложения. Например, вычисление следующего выражения изменяет значение var1 :
var1 = var2
Этот код может вызвать побочный эффект. Побочные эффекты могут усложнить отладку из-за изменения способа работы приложения.
Выражение, у которого есть побочные эффекты, вычисляется только один раз при первом его вводе. После этого выражение отображается в окне Контрольные значения серым цветом, а дальнейшие вычисления отключаются. В столбце подсказки или Значение объясняется, что выражение вызывает побочный эффект. Можно принудительно выполнить повторное вычисление, щелкнув значок обновления рядом с этим значением.
Один из способов предотвратить побочные эффекты — отключить автоматическое вычисление функций. В разделе Сервис>Параметры>Отладка>Общие снимите флажок Включить вычисление свойств и другие неявные вызовы функций.
Только для C#: если вычисление свойств и неявных вызовов функций отключено, можно принудительно вычислить выражение, добавив модификатор формата ac к переменной Имя в окне Контрольные значения. См. раздел Определители формата C#.
Использование идентификаторов объектов в окне «Контрольные значения» (C# и Visual Basic)
Иногда возникает необходимость наблюдать за поведением определенного объекта. Например, может потребоваться отслеживать объект, на который ссылается локальная переменная, после того как эта переменная вышла из области действия. В C# и Visual Basic можно создавать идентификаторы объектов для определенных экземпляров ссылочных типов и использовать их в окне Контрольные значения и условиях точек останова. Идентификатор объекта создается службами отладки среды CLR и связан с объектом.
Идентификаторы объектов создают слабые ссылки, которые не предотвращают сборку мусора для объекта. Они действительны только в рамках текущего сеанса отладки.
В следующем коде метод MakePerson() создает Person с помощью локальной переменной:
class Person < public Person(string name) < Name = name; >public string Name < get; set; >> public class Program < static List_people = new List(); public static void Main(string[] args) < MakePerson(); DoSomething(); >private static void MakePerson() < var p = new Person(«Bob»); _people.Add(p); >private static void DoSomething() < // more processing Console.WriteLine(«done»); >>
Чтобы узнать имя Person в методе DoSomething() , можно добавить ссылку на идентификатор объекта Person в окне Контрольные значения.
- Установите точку останова в коде после создания объекта Person .
- Приступите к отладке.
- Когда выполнение приостанавливается на точке останова, откройте окно Локальные, выбрав Отладка>Окна>Локальные.
- В окне Локальные щелкните переменную Person правой кнопкой мыши и выберите пункт Создать идентификатор объекта. В окне Локальные вы должны увидеть знак доллара ( $ ) плюс число, которое является идентификатором объекта.
- Добавьте идентификатор объекта в окно Контрольные значения, щелкнув правой кнопкой мыши идентификатор объекта и выбрав пункт Добавить контрольное значение.
- Задайте другую точку останова в методе DoSomething() .
- Продолжайте отладку. Когда выполнение остановится в методе DoSomething() , в окне Контрольные значения отобразится объект Person .
Примечание Чтобы просмотреть свойства объекта, например Person.Name , необходимо включить вычисление свойств, выбрав Сервис>Параметры>Отладка>Общие>Включить вычисление свойств и другие неявные вызовы функций.
Динамическое представление и окно «Контрольные значения»
Некоторые языки сценариев (например, JavaScript или Python) используют динамическую или неявную типизацию, а в .NET версии 4.0 и более поздней поддерживаются объекты, которые трудно наблюдать в обычных окнах отладки.
В окне Контрольные значения эти объекты отображаются как динамические объекты, которые создаются из типов, реализующих интерфейс IDynamicMetaObjectProvider. В узле динамического объекта показаны динамические члены динамического объекта, но не разрешено изменять их значения.
Чтобы обновить значения в динамическом представлении, щелкните значок обновления рядом с узлом динамического объекта.
Чтобы отобразить только динамическое представление для объекта, добавьте описатель динамического формата после имени динамического объекта в окне Контрольные значения.
- Для C#: ObjectName, dynamic
- Для Visual Basic: $dynamic, ObjectName
- Отладчик C# автоматически не пересчитывает значения, отображаемые в динамическом представлении при переходе на новую строку кода.
- В Visual Basic отладчик автоматически обновляет выражения, добавляемые с помощью динамического представления.
- Вычисление членов динамического представления может иметь побочные эффекты.
Вставка новой переменной контрольного значения, которая приводит объект к динамическому объекту
- Щелкните правой кнопкой мыши любой дочерний элемент динамического представления.
- Выберите Добавить контрольное значение. object.name становится ((dynamic) object).name и появляется в новом окне Контрольные значения.
Отладчик также добавляет дочерний узел динамического представления объекта в окно Видимые. Чтобы открыть окно Видимые, во время отладки последовательно выберите пункты Отладка>Окна>Видимые.
Динамическое представление также улучшает процесс отладки для COM-объектов. Когда отладчик встречает COM-объект, инкапсулированный в System.__ComObject, он добавляет узел Динамическое представление для объекта.
Наблюдение за одной переменной или выражением с помощью быстрой проверки
Окно Быстрая проверка можно использовать для наблюдения за одной переменной.
Например, для следующего кода:
static void Main(string[] args) < int a, b; a = 1; b = 2; for (int i = 0; i < 10; i++) < a = a + b; >>
Чтобы просмотреть переменную a , выполните следующие действия:
- Установите точку останова на строке a = a + b; .
- Приступите к отладке. Выполнение останавливается в точке останова.
- Выберите переменную a в коде.
- Выберите Отладка>Быстрая проверка, нажмите клавиши SHIFT+F9 или щелкните правой кнопкой мыши и выберите в контекстном меню команду Быстрая проверка. Появится диалоговое окно Быстрая проверка. Переменная a находится в поле Выражение со значением1.
См. также
- Что такое отладка?
- Методы и инструменты отладки
- Первое знакомство с отладкой
- Окна отладчика
Источник: learn.microsoft.com