Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
0 / 0 / 0
Регистрация: 22.05.2025
Сообщений: 14

Переписать IP адреса в столбик

22.05.2025, 14:39. Показов 3044. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет! Я здесь халявщик!
Есть последовательность IP-адресов типа 111.2.33.111 в разном порядке, записанных в одну строчку через запятую и пробел. Можно ли переписать их в столбик (как через Enter), и сделать конкретно .bat файл (.ехе не хочу), с параметрами -input.txt -output.txt где в первом они в строчку, а во втором - в столбик? Лежать файлы будут в одной папке. Для программеров такое раз плюнуть, я знааю. Может быть кто с этим поможет? (Опционально - сортировка по возрастанию, но это чуть сложнее, наверно.)
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2025, 14:39
Ответы с готовыми решениями:

Вытянуть из DNS ip адрес в отдельный столбик
всем привет, в PowerShell только разбираюсь, подскажите в таком вопросе. в скриптах я еще не силен...

Женский день близится. Дизайн в столбик. Прошу эстетов вынести экспертную оценку
(gci *). where{ $_.CreationTime -gt (Get-Date("2019-03-05")) }. where{ $_.Length -lt 500...

Как быстро сохранить в переменную типа array текстовые данные в столбик, без разделителя?
Подскажите, как быстро сохранить в переменную типа array текстовые данные в столбик, без...

31
 Аватар для Angry Old Man
3325 / 752 / 316
Регистрация: 26.03.2022
Сообщений: 1,412
Записей в блоге: 1
24.05.2025, 16:22
Студворк — интернет-сервис помощи студентам
pom77,
Попробуйте .vbs скрипт
Visual Basic
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
Dim FileIn          ': FileIn = "D:\CMD_Forum\Box_In\tra la la.kuku"
Dim FSO: Set FSO = CreateObject("Scripting.FileSystemObject")
Dim D: Set D = CreateObject("Scripting.Dictionary")
 
Dim s, i, j, k, jj
Dim ss
 
With WScript.Arguments
    If .Count > 0 Then
        FileIn = .Item(0)
    Else
        MsgBox "The file is not specified in the script argument", 16
        WScript.Quit
    End If
End With
 
With FSO.OpenTextFile(FileIn, 1, False)
    s = Split(Replace(.ReadLine, " ", ""), ",")
    .Close
End With
 
With CreateObject("Scripting.Dictionary")
    For Each i In s
        k = Split(i, ".")
        j = Right("000" & k(0), 3) & Right("000" & k(1), 3) & Right("000" & k(2), 3) & Right("000" & k(3), 3)
        If Not .Exists(j) Then
            .Add j, i
        End If
    Next
    jj = .Count - 1
    ReDim ss(jj)
    
    s = .Keys
    
    For i = 0 To jj
        For j = i To jj
            If s(i) > s(j) Then
                k = s(i): s(i) = s(j): s(j) = k
            End If
        Next
        ss(i) = .Item(s(i))
    Next
    
End With
 
With FSO
    With .OpenTextFile(.GetParentFolderName(FileIn) & "\" & .GetBaseName(FileIn) & ".Out." & .GetExtensionName(FileIn), 2, True)
        For Each i In ss
            .WriteLine i
        Next
        .Close
    End With
End With
Прилагаю файл со скриптом (уберите расширение .txt)
Cохраняете скрипт где угодно, на рабочем столе делаете на него иконку и в проводнике мышкой Ваш обрабатываемый файл, например, input.txt, затягиваете на эту иконку. В результате рядом с input.txt получите файл input.out.txt.
Там отсортированные адреса без дубликатов.
Вложения
Тип файла: txt я250524.vbs.txt (1.3 Кб, 18 просмотров)
0
 Аватар для volodin661
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,027
24.05.2025, 17:51
Angry Old Man, что-то как-то сложно

Visual Basic
1
2
3
4
k = Split(i, ".")
 
rem превратить 4 части в Unsigned Integer для последующей сортировки
uint = k(0) * (2^24) + k(1) * (2^16) + k(2) * (2^8) + k(3)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
24.05.2025, 18:19
Просто ради прикола : https://onlinegdb.com/b5C-KVUNQ
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
#include <iostream>
#include <tuple>
#include <set>
#include <string>
#include <fstream>
#include <sstream>
#include <iterator>
 
using elem_t = unsigned;
using ip_t = std::tuple<elem_t, elem_t, elem_t, elem_t>;
 
 
ip_t parse_ip(const std::string& str){
   std::istringstream ss(str);
   ip_t ip;
   char ch;
   using std::get;
   if (ss >> get<0>(ip) >> ch >> get<1>(ip) >> ch >> get<2>(ip) >> ch >> get<3>(ip))
      return ip;
   throw "ip parse error";
}
 
template<class Inserter>
bool read_from_file(const std::string& filename, Inserter inserter){
   if (std::ifstream f(filename); f.is_open()){
      std::string input;
      while(getline(f, input, ','))
         inserter = parse_ip(input);
      return true;
   }
   std::cerr << "input file not found" << std::endl;
   return false;
}
 
template<class Cont>
void save_ips_to_file(const std::string& filename, const Cont& c){
   if(std::ofstream f(filename); f.is_open()){
      using std::get;
      for(const auto& ip : c)
         f << get<0>(ip) << '.' << get<1>(ip) << '.' << get<2>(ip) << '.' << get<3>(ip) << std::endl; 
   }else
      std::cerr << "output to file error" << std::endl;
}
 
int main(int argc, char ** argv){
   std::string in = "input.txt", out = "output.txt";
   if (argc > 1)
      in = argv[1];
   if (argc > 2)
      out = argv[2];
 
   std::set<ip_t> ips;
   auto inserter = std::inserter(ips, ips.end());
 
   if (read_from_file(in, inserter))
      save_ips_to_file(out, ips);
}
0
 Аватар для volodin661
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,027
24.05.2025, 18:50
А вот что сказал инопланетный разум:


VBSCRIPT
Visual Basic
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
Option Explicit
 
Dim ipList
ipList = Array("123.45.56.78", "192.168.1.2", "172.12.34.56", "255.255.255.0")
 
' Call the sort function
Call BubbleSortIP(ipList)
 
' Output the sorted list
Dim i
For i = 0 To UBound(ipList)
    WScript.Echo ipList(i)
Next
 
' Bubble sort implementation for IPv4 addresses
Sub BubbleSortIP(arr)
    Dim i, j
    Dim temp
    Dim swapped
    swapped = True
 
    Do While swapped
        swapped = False
        For i = 0 To UBound(arr) - 1
            If CompareIP(arr(i), arr(i + 1)) > 0 Then
                ' Swap
                temp = arr(i)
                arr(i) = arr(i + 1)
                arr(i + 1) = temp
                swapped = True
            End If
        Next
    Loop
End Sub
 
' Compare two IP addresses
Function CompareIP(ip1, ip2)
    Dim octets1, octets2
    octets1 = Split(ip1, ".")
    octets2 = Split(ip2, ".")
 
    Dim i
    For i = 0 To 3
        Dim num1, num2
        num1 = CInt(octets1(i))
        num2 = CInt(octets2(i))
        If num1 < num2 Then
            CompareIP = -1
            Exit Function
        ElseIf num1 > num2 Then
            CompareIP = 1
            Exit Function
        End If
        ' If equal, continue to next octet
    Next
 
    ' All octets are equal
    CompareIP = 0
End Function

C++
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
#include <iostream>
#include <vector>
#include <string>
#include <sstream>
#include <algorithm>
 
// Function to parse an IPv4 string into a vector of four integers
std::vector<int> parseIPv4(const std::string& ip) {
    std::vector<int> octets;
    std::istringstream iss(ip);
    std::string token;
    while (std::getline(iss, token, '.')) {
        octets.push_back(std::stoi(token));
    }
    return octets;
}
 
int main() {
    std::vector<std::string> ips = {
        "123.45.56.78",
        "192.168.1.2",
        "172.12.34.56",
        "255.255.255.0"
    };
 
    // Sort using a custom comparator that compares octets
    std::sort(ips.begin(), ips.end(), [](const std::string& a, const std::string& b) {
        std::vector<int> a_octets = parseIPv4(a);
        std::vector<int> b_octets = parseIPv4(b);
        for (size_t i = 0; i < 4; ++i) {
            if (a_octets[i] != b_octets[i]) {
                return a_octets[i] < b_octets[i];
            }
        }
        return false; // they are equal
    });
 
    // Print sorted IPs
    for (const auto& ip : ips) {
        std::cout << ip << std::endl;
    }
 
    return 0;
}
JAVA
Java
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
import java.util.Arrays;
import java.util.Comparator;
 
public class IPv4NaturalSort {
    public static void main(String[] args) {
        String[] ips = {
            "123.45.56.78",
            "192.168.1.2",
            "172.12.34.56",
            "255.255.255.0"
        };
 
        Arrays.sort(ips, new Comparator<String>() {
            @Override
            public int compare(String ip1, String ip2) {
                int[] octets1 = parseIp(ip1);
                int[] octets2 = parseIp(ip2);
                for (int i = 0; i < 4; i++) {
                    int cmp = Integer.compare(octets1[i], octets2[i]);
                    if (cmp != 0) {
                        return cmp;
                    }
                }
                return 0;
            }
 
            private int[] parseIp(String ip) {
                String[] parts = ip.split("\\.");
                int[] octets = new int[4];
                for (int i = 0; i < 4; i++) {
                    octets[i] = Integer.parseInt(parts[i]);
                }
                return octets;
            }
        });
 
        // Print the sorted IPs
        for (String ip : ips) {
            System.out.println(ip);
        }
    }
}
0
2807 / 505 / 121
Регистрация: 26.09.2020
Сообщений: 954
Записей в блоге: 5
25.05.2025, 11:59
Воскресенье с кровати и до обеда делать было нечего.
Зачем то я это написал…

Пара функций


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
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# Функция принимает строку IP-адреса и возвращает его целочисленное представление
function IpTo-Integer ( [Parameter(ValueFromPipeline = $true)] [string] $Ip ) {
    process {
        # Разделяем IP-адрес на октеты и преобразуем их в массив байтов
        [byte[]] $octets = $Ip.Split('.') | ForEach-Object {
            $byte = $null
 
            if (-not [byte]::TryParse($_, [ref] $byte)) {
                throw "Некорректный октет: $_ в IP-адресе: «$Ip»"
            }
 
            $byte
        }
 
        # Проверяем, что IP-адрес состоит из 4 октетов
        if ($octets.Length -ne 4) {
            throw "Октетов должно быть 4. Некорректный формат IP-адреса: «$Ip»"
        }
 
        # Преобразуем октеты в целое число с использованием битовых операций
        return  ([long] $octets[0] -shl 24) -bor
                ([long] $octets[1] -shl 16) -bor
                ([long] $octets[2] -shl  8) -bor
                ([long] $octets[3])
    }
}
 
# Функция принимает целое число IP-адреса и возвращает его строковое представление
function IntegerTo-Ip ( [Parameter(ValueFromPipeline = $true)] [long] $Ip ) {
    process {
        # Даиапазон IP-адресов версии 4 (IPv4) составляет:
        # от 0.0.0.0 до 255.255.255.255,
        # от 0 до 4294967295 (2^32 - 1).
        if ($Ip -lt 0) {
            throw "IP «$Ip» не может быть меньше 0."
        }
        
        if ($Ip -gt 4294967295) {
            throw "IP «$Ip» не может быть больше 4294967295 (255.255.255.255)."
        }
 
        # Извлекаем октеты из целого числа с использованием битовых операций
        $octet4 = ($Ip -band 0xff)
        $octet3 = ($Ip -shr  8) -band 0xff
        $octet2 = ($Ip -shr 16) -band 0xff
        $octet1 = ($Ip -shr 24)
 
        # Формируем строку IP-адреса
        return "$octet1.$octet2.$octet3.$octet4"
    }
}
 
# Функция для генерации целых чисел, представляющих IP-адреса.
function Generate-IpInteger {
    param (
        # Стартовый адрес, по умолчанию "1.1.1.1", в виде целого числа.
        [long] $StartIp = 16843009,
 
        # Количество адресов для генерации.
        [int] $Count = 500
    )
 
    # Проверка на допустимость значений
    if ($StartIp -lt 0) {
        throw "StartIp не может быть меньше 0."
    }
 
    if ($StartIp -gt 4294967295) {
        throw "StartIp не может быть больше 4294967295 (255.255.255.255)."
    }
 
    if ($Count -lt 1) {
        throw "Количество ip адресов для генерации не может быть меньше 1"
    }
    
    $maxCount = 4294967295 - $StartIp
 
    if ($Count -gt $maxCount) {
        throw "Количество адресов для генерации не может быть больше $maxCount"
    }
 
    # Генерируем IP-адреса в виде целых чисел
    for ($i = 0; $i -lt $Count; $i++) {
        $StartIp + $i
    }
}
 
# Функция для перемешивания элементов
function Shuffle-Items {
    begin {
        $items = @()
    }
    process {
        $items += $_
    }
    end {
        if ($items.Count -gt 0) {
            $items | Get-Random -Count $items.Count
        }
    }
}

Пример использования


PowerShell
1
2
3
4
5
6
# Генерация ip | преобразование в строковое представление | перемешивание.
$ips = Generate-IpInteger -Count 20 | IntegerTo-Ip | Shuffle-Items
$ips # вывод не сортированных ip адресов.
 
# сортировка
$ips | IpTo-Integer | sort | IntegerTo-Ip

Не по теме:

А у всех набирая на numpad клавиатуре: Alt+0133 (многоточие)
вылазят теги: [CPP][CPP]…[/CPP][/CPP] ?

0
25.05.2025, 12:54

Не по теме:

Цитата Сообщение от iNNOKENTIY21 Посмотреть сообщение

Не по теме:

А у всех набирая на numpad клавиатуре: Alt+0133 (многоточие)
вылазят теги: [CPP][CPP]…[/CPP][/CPP] ?

Да) По Alt+3 - [CPP]♥[/CPP]
Это забавно)

0
25.05.2025, 13:20

Не по теме:

Ага, на некоторые, Alt+нумпад цифры, назначили некоторые теги для блоков кода, powershell забыли.
может, где то, это отключается? или, какой скрипт заблокировать :wall:

0
 Аватар для volodin661
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,027
25.05.2025, 14:06
Цитата Сообщение от iNNOKENTIY21 Посмотреть сообщение
Генерируем IP-адреса в виде целых чисел
через 50 лет про IPv4 никто и знать-то не будет

( это я масла подлил в костёр. как Аннушка )
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.05.2025, 14:59
Цитата Сообщение от volodin661 Посмотреть сообщение
через 50 лет про IPv4 никто и знать-то не будет
Для локальных сеток их более чем достаточно.
Так что будут, если не изменится сетевой интерфейс в целом.
0
 Аватар для volodin661
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,027
25.05.2025, 16:05
Цитата Сообщение от SmallEvil Посмотреть сообщение
Для локальных сеток их более чем достаточно.
ха-ха. А как же смартфоны и IoT ?

По первоначальной задумке провайдер просто-таки обязан тебе выдать в личное пользование пул адресов v6 по маске /48 совершенно бесплатно.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
25.05.2025, 16:16
Цитата Сообщение от volodin661 Посмотреть сообщение
А как же смартфоны и IoT ?
Инквизиция запретит.
0
 Аватар для volodin661
7094 / 2325 / 353
Регистрация: 10.12.2013
Сообщений: 8,027
25.05.2025, 16:23
в рсии-то уж точно. Найдут при обыске пакетик с ip-адресами и получи 8 лет с конфискацией.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.05.2025, 16:23

Вытащить ИП адрес и МАК адрес машины, которая "накрылась"
Всем доброго времени суток! Вопрос у меня такой. Полетела машина. которая была подключена к...

Инструкция по адресу... обратилась к памяти по адресу... Память не может быть "written"..
Люди, подскажите плиз, что сделать? Неоднократно спрашивалось, но переустанавливать винду не...

Отправлять внешний IP-адрес ПК на электронный адрес...
Всем привет!!! У меня появилась необходимость знать IP адрес удаленного компа (при его включении)...

Инструкция по адресу 0x73ce8f18 обратилась к памяти по адресу 0х00000004. Память не может быть "read"
Помогите! Не знаю, что случилось :( мой нетбук перестал включаться. В том месте, где обычно...

На одном из компьютеров адрес dhcp-сервера сменился на адрес компьютера другого сотрудника
Здравствуйте! Столкнулся с такой проблемой: на одном из компьютеров отвалился интернет, перво...


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

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru