• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Plik .bat który dodaje spacje, co jakiś odstep ze spójnego ciągu znaków.

VPS Starter Arubacloud
+1 głos
620 wizyt
pytanie zadane 22 czerwca 2020 w Inne języki przez Tine Użytkownik (690 p.)
Witam wszystkich,

Czy jest możliwosc napisania pliku bat, ktory z danego ciągu znaków np. 312423452345723684418764t1253612436512453412536512436761222223524351243512436541231243444444441652436712355126735712536124361245333333387126381264517774189237891243120444129841255552305802999587, zapisanego np w znaki.txt, będzie dodawał spacje (odstęp), co 4 znak i nastepnie tak wygenerowany ciąg znaków zapisywał w pliku tekstowym?

Dla jasności mam taki ciąg znaków : 235137890263

I po przekształceniu takiego ciągu znaków przez plik bat lub jaki kolwiek inny sposób odrzymać nastepujący ciąg znaków :2351 3789 0267

Który bedzie zapisywany w ciagspace.txt

Może są do tego jakieś programy?

Może ktoś wie jak zrobic taki plik bat?

Dzieki za pomoc!

2 odpowiedzi

+2 głosów
odpowiedź 22 czerwca 2020 przez tkz Nałogowiec (42,000 p.)
wybrane 22 czerwca 2020 przez Tine
 
Najlepsza
file = open("liczby.txt", "r").read()
open("costam.txt", "w").write(
    ' '.join([file[i:i+4] for i in range(0, len(file), 4)]))

 

komentarz 22 czerwca 2020 przez Tine Użytkownik (690 p.)
Może wie ktoś jak można to zrobić w pliku .bat ?

 

Dzięki za pomoc!
1
komentarz 22 czerwca 2020 przez tkz Nałogowiec (42,000 p.)
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION
SET /p STR=<liczby.txt

REM Split STR by N characters
SET "N=4"

:LOOP
SET "RES=%RES%!STR:~0,%N%! "
SET "STR=!STR:~%N%!"
IF DEFINED STR GOTO LOOP
ECHO |set /p="%RES:~0,-1%">text.txt

Nie wiem dlaczego bat ponad python...

komentarz 22 czerwca 2020 przez Tine Użytkownik (690 p.)
edycja 22 czerwca 2020 przez Tine
Nie każdy na komputerze ma zainstalowane środowisko pythona, a bat praktycznie każdy.

 

Dzięki za pomoc!
komentarz 22 czerwca 2020 przez tkz Nałogowiec (42,000 p.)
Niby tak, ale spójrz na czytelność kodu.
komentarz 22 czerwca 2020 przez Tine Użytkownik (690 p.)
edycja 23 czerwca 2020 przez Tine
Po testowaniu: Progam bat działa i dodaje odstepy co 4 znak ale tylko gdy w pliku.txt nie ma zbyt dużo cyfr, umieśćiłem w pliku text.txt liczby od 1 do 100000 (ciąg licz bez odstępów) i progam bat nie działa dla tak dużego pliku, nie wiem od czego to zależy ale po odpaleniu bata w pliku text.txt cała zawartość ( liczby od 1 do 10000) zostały ununięte i widoczny jest następujący text: ~0,4 ~4 Mógłbys mi wyjaśnic dlaczego tak sie dzieje? Dzieki za pomoc !
1
komentarz 22 czerwca 2020 przez tkz Nałogowiec (42,000 p.)
Maksymalny rozmiar dla stringa w batchu to 8191 dla 64 bitowej maszyny. Zamiana na liczbę całkowitą nic nie da. Zostaje python. Chyba, że będziesz czytał sekwencyjnie...
+2 głosów
odpowiedź 22 czerwca 2020 przez VBService Ekspert (251,210 p.)
edycja 23 czerwca 2020 przez VBService

split4.vbs

Option Explicit

On Error Resume Next

Dim oShell
Dim oFso, oFile
Dim sSource, sDestiny
Dim sLine, cLine, cLineFormat, iStep
Dim fName, fSize

Const READ = 1
Const OVERWRITE = True
Const OPEN = False
Const SPACECHAR = " "

iStep = 4
sLine = VbNullString
sSource = "znaki.txt"
sDestiny = "ciagspace.txt"

Set oShell = WScript.CreateObject("WScript.Shell")
Set oFso = CreateObject("Scripting.FileSystemObject")
sSource = oFso.BuildPath(oShell.CurrentDirectory, sSource)
sDestiny = oFso.BuildPath(oShell.CurrentDirectory, sDestiny)

If oFso.FileExists(sSource) Then
    Set oFile = oFso.GetFile(sSource)
    fName = oFile.Name
    fSize = SizeSuffix(oFile.Size)

    Set oFile = oFso.OpenTextFile(sSource,READ,OPEN)
    Do Until oFile.AtEndOfStream
        sLine = sLine & oFile.ReadLine
    Loop
    oFile.Close

    cLine = Len(sLine)
    cLineFormat = FormatNumber(cLine, False)

    Msgbox "Nazwa pliku:  " & fName & vbCrLf & _
            "     Wielkosc:  " & fSize & vbCrLf & _
            "    Ilosc cyfer:  " & cLineFormat, _
            vbOkOnly, "Plik wczytany"

    Dim i, sWriteLine

    sWriteLine = VbNullString
    Set oFile = oFso.CreateTextFile(sDestiny, OVERWRITE)    

    For i = 1 To cLine Step iStep
        sWriteLine = Mid(sLine, i, iStep) & SPACECHAR
        ' Msgbox "i = " & i & vbCrLf & "Mid = " & sWriteLine
        oFile.Write sWriteLine
    Next

    oFile.Close
    Set oFile = Nothing

    If Err.Number = 0 Then
        fName = oFso.GetFileName(sDestiny)
        Msgbox "Plik zostal zapisany:  " & fName, vbOkOnly, "Plik zapisany"
    Else
        Msgbox Err.Number & " Srce: " & Err.Source & vbCrLf & _
                " Desc: " &  Err.Description, vbOkOnly, "Error"
        Err.Clear
    End If
Else
    Msgbox "Plik zrodlowy nie istnieje." & vbCrlf & sSource, vbOkOnly, "Error"
End If

Set oFso = Nothing
Set oShell = Nothing

WScript.Quit

Function SizeSuffix(Size)
    Dim sSuffix

    Select Case True
        Case InRange(Size, 1024, 1048575)
            Size = Round(Size / 1024, 2)
            sSuffix = " KB"
        Case InRange(Size, 1048576, 1073741823)
            Size = Round(Size / 1048576, 2)
            sSuffix = " MB"
        Case InRange(Size, 1073741824, 1099511627775)
            Size = Round(Size / 1099511627776, 2)
            sSuffix = " GB"
        Case Else
            sSuffix = " Bytes"
    End Select

    SizeSuffix = Size & sSuffix
End Function

Function InRange(Value, Min, Max)
    InRange = Value >= min And Value <= Max
End Function

Podobne pytania

0 głosów
1 odpowiedź 593 wizyt
pytanie zadane 18 czerwca 2021 w C# przez disaster Bywalec (2,120 p.)
0 głosów
0 odpowiedzi 271 wizyt
pytanie zadane 4 listopada 2020 w C i C++ przez saintx Nowicjusz (120 p.)
+2 głosów
4 odpowiedzi 552 wizyt
pytanie zadane 12 września 2020 w C i C++ przez Dezmonths Początkujący (310 p.)

92,453 zapytań

141,262 odpowiedzi

319,086 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...