0 / 0 / 0
Регистрация: 12.07.2020
Сообщений: 8
1

Создание переменной внутри функции, при ее изменении внутри функции значение не меняется

13.11.2020, 23:23. Показов 2380. Ответов 2

Author24 — интернет-сервис помощи студентам
Прошу объяснить, как работают глобальные переменные созданные внутри функции и ключи -Scpe -Option командлента Set-Variable.

Моя задача создать хэш-таблицу с данными из файла.
Функция направляет текст из файла в ForEach (в файле структура из множества строк, по 3 строки разделенные пробелом (`n)).
Каждая строка присваивается соответствующему элементу массива $buffer и в момент когда переменная конвеера пуста (равна пустой строке) массив заносится в хэш-таблицу.

Как понял при создании глобальной переменной она копируется во все сеансы или области, и после создания меняя ее внутри функции она не будет менятся в осальных местах.
Получилось решить эту проблему с помощью Set-Variable с параметрами.
А вот как работать с массивом в Set-Variable?

PowerShell
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
Function Fun1 {
 
    New-Variable -name HashTable -Value (@{}) -Scope Global;
    New-Variable -name buffer -Value (1..3) -Scope Global;
    Out-File "test.txt" | ForEach-Object {
        Begin{
            [integer]$i=1
        };
        Process{
            if ($_ -eq "") {
                $HashTable.add($buffer[0],$buffer);
            }
            else {
                Switch ($i) {
                    (1) {$buffer[0]=$_ ; $i+=1;}
                    (2) {$buffer[1]=$_ ; $i+=1;}          <#как можно сюда встроить Set-Variable?#>
                    (3) {$buffer[2]=$_ ; $i=1;}
                }
            } 
       };
       End{
           Set-Variable -name HashTable -Value $HashTable -Force -Scope Global -Option AllScope; 
<#копирую переменную и данные в ней для всех областей "делаю глобальной"#>
       }
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2020, 23:23
Ответы с готовыми решениями:

Как поменять значение переменной внутри функции С++
Здравствуйте, в очередной раз столкнулся с проблемой, хочу разбить строку на подстроки по...

Почему не изменяется значение переменной внутри функции?
Есть функция: void get_string(struct str* tmp, int start, double summ) { double q = summ; ...

Структуры. Создание переменной int внутри функции. Ошибка
Первый раз работаю со структурами. Компилятор жалуется на 13 строку со словами &quot;new types may not...

Получить значение переменной, описанной в функции внутри класса
Здравствуйте. Есть некоторый класс from tkinter import * from tkinter import ttk import...

2
504 / 157 / 49
Регистрация: 27.02.2016
Сообщений: 801
14.11.2020, 00:05 2
точно так же как и другие типы
C#
1
2
3
4
$data = @()
 $data += 'data'
  $data += 'more data'
  set-variable -name z -value $data -force -scope Global -option AllScope
0
1329 / 489 / 137
Регистрация: 20.02.2019
Сообщений: 2,451
Записей в блоге: 42
14.11.2020, 08:58 3
Лучший ответ Сообщение было отмечено Halsey как решение

Решение

Halsey, а если вернуться к постановке задачи вот это будет являться решением?

PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
PS C:\Users\alhao> @"
1
2
3
 
4
5
6
 
7
8
9
"@ | out-file c:\tmp\tmp.txt
 
$array = @()
$global:i = 0
Get-Content c:\tmp\tmp.txt | group {[math]::Truncate(($global:i/4));$global:i++} | % {
    $array +=, @{one = $_.Group[0]; two = $_.Group[1]; three = $_.Group[2]}
}
 
$array
Код
Name                           Value                                                                                                                                     
----                           -----                                                                                                                                     
one                            1                                                                                                                                         
three                          3                                                                                                                                         
two                            2                                                                                                                                         
one                            4                                                                                                                                         
three                          6                                                                                                                                         
two                            5                                                                                                                                         
one                            7                                                                                                                                         
three                          9                                                                                                                                         
two                            8
Добавлено через 4 минуты
вот так мне нравится больше
PowerShell
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
PS C:\Users\alhao> @"
1
2
3
 
4
5
6
 
7
8
9
"@ | out-file c:\tmp\tmp.txt
 
[PSCustomObject[]]$objects
 
$global:i = 0
Get-Content c:\tmp\tmp.txt | group {[math]::Truncate(($global:i/4));$global:i++} | % {
   $objects +=, [PSCustomObject]@{
    one = $_.Group[0]
    two = $_.Group[1]
    three = $_.Group[2]
  }
}
 
$objects
Код
one two three
--- --- -----
1   2   3    
4   5   6    
7   8   9
0
14.11.2020, 08:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2020, 08:58
Помогаю со студенческими работами здесь

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using...

Использование переменной внутри функции
чтобы переменную использовать внутри функции ее нужно туда поместить по типу ...

Создание функции внутри другой функции
доброго времени суток. необходимо решить 3 задачи, скрипт с вычислениями поместить в файле .js, а...

Видимость глобальной переменной внутри функции
Есть обращение к веб-сервису, тот в свою очередь возвращает значение. Так вот, есть функция,...

Изменение внешней переменной внутри функции
Как можно изменить переменную функцией так, чтобы она поменяла значение? var s = 1; function...

Инициализация переменной, которая определена внутри функции
В учебнике по которому учусь есть строка: Если вы не инициализируете переменную, которая определена...


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

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

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