Forum Gry Hobby Sprzęt Rozmawiamy Archiwum Regulamin

Forum: Jak usunąć konkretny znak z konkretnych linii XMLa?

15.12.2020 16:37
Kyahn
1
Kyahn
273
Rossonero

Jak usunąć konkretny znak z konkretnych linii XMLa?

Czy jest jakaś łatwy sposób usunięcia wszystkich znaków "-", ale tylko z linii zaczynających się od konkretnego ciągu znaków? Chodzi mi o plik JPK, który nie może mieć myślników w NIPach.
Wszystkie linie z NIPem zaczynają się od <tns:NrKontrahenta>.
Program musiałby odnaleźć te linie, a następnie usunąć z nich myślniki, o ile takie występują.
Myślałem, że w Notepad++ uda mi się to zrobić, ale najwyraźniej nie potrafię.
Może jakieś inne edytory tekstowe sobie z tym bez problemu poradzą?

15.12.2020 16:43
2
dienicy
75
Generał

Trzeba sie nauczyc obslugi Notepad++ na dostatecznym poziomie.

15.12.2020 17:00
3
A_wildwolf_A
221
Senator

nic ci to nie da, plik JPK ma do tego, że po wygenerowaniu już nic w nim nie zmienisz, bo US z miejsca go odrzuci, wraz z generowanie pliku generowany jest "specjalny ciąg cyfr" inaczej suma kontrolna pliku na podstawie danych z dokumentu, jak usuniesz myślniki to suma się zmieni i US go odrzuci

15.12.2020 17:08
4
dienicy
75
Generał

Moze zamiast usuniecia da rade zastapic innym znakiem?

15.12.2020 17:16
Kyahn
5
Kyahn
273
Rossonero

nic ci to nie da, plik JPK ma do tego, że po wygenerowaniu już nic w nim nie zmienisz, bo US z miejsca go odrzuci, wraz z generowanie pliku generowany jest "specjalny ciąg cyfr" inaczej suma kontrolna pliku na podstawie danych z dokumentu, jak usuniesz myślniki to suma się zmieni i US go odrzuci

Hmm.
W którym momencie/miejscu jest generowana suma kontrolna i skąd US wie jaka jest ta właściwa?
W sensie to jest zapisane gdzieś w XMLu jako tekst? Pierwsza interakcja US z ma przecież miejsce dopiero po przesłaniu pliku.

Patrząc tutaj https://jpk.info.pl/wysylka-jpk/bledy-upo-plik-jpk/. Rzeczywiście jest błąd sumy kontrolnej, ale to jest zupełnie inna suma niż ta, o której mówisz, bo po prostu dotyczy sumowania kwot w JPK.

Z twojej wypowiedzi zrozumiałem że JPK miałby sprawdzać sumy kontrolne typu CRC32 czy MD5, tylko nie bardzo wiem jak miałby to weryfikować.

A wracając do tematu, jak to najłatwiej zrobić, pomijając czy US to łyknie czy nie?

post wyedytowany przez Kyahn 2020-12-15 17:27:04
15.12.2020 17:36
maviozo
6
1 odpowiedź
maviozo
233
autor zdjęć

Zapewne używając regex, wyrażenie regularne. Wydaje mi się, że notepad++ ma taką opcję.

15.12.2020 17:46
6.1
dienicy
75
Generał

Ma (nie, ze sie nauczylem jak obslugiwac, ale raz mi ktos powiedzial co mam zrobic). Jednakze, jezeli jest jak mowi A_wildwolf_A to sprawa sie komplikuje.

15.12.2020 17:38
Kyahn
7
Kyahn
273
Rossonero

Właśnie o tym czytam, tylko niewiele z tego wynika.
Trzeba będzie trochę pogłówkować :(

15.12.2020 17:41
maviozo
8
maviozo
233
autor zdjęć

Są fajne narzędzia online do debugowania tych wyrażeń, ja się nigdy tego dobrze się nie nauczyłem. Te gotówce fajnie na żywo pokazują, czy wyrażenie działa prawidłowo.

17.12.2020 08:10
Kyahn
9
Kyahn
273
Rossonero

UP

17.12.2020 09:12
Amadeusz ^^
10
Amadeusz ^^
207
of the Abyss

Ale zaraz, ten myślnik jest tu czy tu:
a) <tns:NrKontrahenta>-12345</tns:NrKontrahenta>
b) <tns:-NrKontrahenta>12345</tns:NrKontrahenta>

(Ja zrozumiałem że opcja a)

Regex do znalezienia konkretnych linii to będzie takie cudo:

^<tns:\S‹1,15›>-\d‹1,15›<\/tns:\S‹1,15›>$ (gdzie ‹1,15› wyznacza min-max ilość znaków)

Ale to się nie bardzo przyda, bo w Notepad++ nie da się (albo ja nie wiem jak) podmienić dane wyrażenia regularnego tak żeby nie zrobił burdelu.

Nie prościej byłoby zrobić:

Find in files: >-
Replace with >

A później po prostu sprawdzić na szybko w aplikacji do porównania zmian (np. diffchecker) czy nie zrobiło to jakichś kwiatków tam gdzie nie powinno - ale nie sądzę że zrobi, bo połączenia znaków ">-" czy ":-" (jeżeli opcja B jest właściwa) raczej nie widuje się na co dzień.

Ale jak rzeczywiście JPK tworzy checksum to plik może się wykrzaczyć po takich zmianach na etapie weryfikacji.

17.12.2020 09:18
Kyahn
11
Kyahn
273
Rossonero

Amadeusz ^^

Masz plik w którym jest wiele linii <tns:NrKontrahenta>nrNIP</tns:NrKontrahenta>
czyli np w niektórych jest
<tns:NrKontrahenta>123457890</tns:NrKontrahenta>
a w niektórych
<tns:NrKontrahenta>123-45-67-890</tns:NrKontrahenta>
a jeszcze w niektórych
<tns:NrKontrahenta>12-34-567-890</tns:NrKontrahenta>

Chodzi o to żeby z tych linii usunął myślniki.
Nie mogę usunąć wszystkich myślników, bo w innych liniach też są, ale akurat tam są potrzebne, bo np daty mają format 01-01-2020.
Po prostu w JPK NIPy nie mogą mieć myślników.

I JPK nie tworzy żadnych checksumów, jestem pewny na 99% (tzn na tym etapie nie tworzy)

post wyedytowany przez Kyahn 2020-12-17 09:37:11
17.12.2020 09:26
12
1
xiver
88
Pretorianin

Tak na szybko:
Notepad++, CTRL+H, zaznacz na dole w okienku "Wyrażenia regularne"
Szukany tekst: (<tns:NrKontrahenta>\d‹;;2,3›;;)-(\d‹;;2,3›;;)-(\d‹;;2,3›;;)-(\d‹;;2,3›;;</tns:NrKontrahenta>)
Zamień na: $1$2$3$4
https://i.imgur.com/G110i1k.png tutaj podgląd.

Powinno działać na takie: https://i.imgur.com/UEtVBkE.png

Edit: forum tutaj zmienia nawiasy klamrowe na jakieś znaczki. Musisz to zmienić przed wklejeniem https://pastebin.com/nQMkLuEP

W skrócie działa to tak, że łapiesz grupy w nawiasy () i potem się do nich odnosisz jako $1$2$3$4 Z nawiasów są wykluczone myślniki ;D Barbarzyńsko, ale ja tylko tak regexy robię :P

post wyedytowany przez xiver 2020-12-17 09:33:49
17.12.2020 09:35
Kyahn
👍
13
3 odpowiedzi
Kyahn
273
Rossonero

Wielkie dzięki xiver jak tylko będę miał trochę wolnego czasu to nad tym siądę i potestuję.

17.12.2020 09:41
13.1
xiver
88
Pretorianin

No trochę mnie te JPK męczą, bo różne przerabiałem, ale ostatnio większość hula bez cudowania i kombinowania ;D
https://i.imgur.com/yGDJ3br.png

17.12.2020 09:44
Kyahn
13.2
Kyahn
273
Rossonero

A weź mnie nie załamuj.
My używamy programów WAPRO od Asseco i wydawałoby się, że tak wielka firma nie powinna mieć problemów z tak banalnymi zagadnieniami, a burdel jest niesamowity.
Jeszcze w listopadzie dało się wygenerować plik bez myślników, ale coś pokombinowali i obecnie się nie da. Znają problem i pracują nad rozwiązaniem, ale czy się wyrobią?
A co US obchodzą twoje problemy techniczne? Ręce opadają.

post wyedytowany przez Kyahn 2020-12-17 09:45:50
17.12.2020 09:47
13.3
xiver
88
Pretorianin

Asseco słynie z "niezawodnego i nowoczesnego" softu. Szczególnie w przetargach publicznych ;)

17.12.2020 11:08
Arni28
14
Arni28
53
factor828

Na linuksie:

sed -i '/tns/s/-//g' nazwapliku.xml

powinno działać. Na wszelki wypadek zrób kopię pliku, bo ta komenda podmieni dane bezpośrednio w pliku źródłowym.

17.12.2020 15:45
Kyahn
👍
15
Kyahn
273
Rossonero

xiver
Działa!
Jeszcze raz wielkie dzięki.

[edit]
Już nawet zrozumiałem co zrobiłeś
Twoje całe zastępowanie opiera się na założeniu,
że NIP składa się albo z 2, albo z 3 cyfrowych bloków, przedzielonych 3 myślnikami, inaczej ciąg nie zostanie odnaleziony.
W sumie wydaje się to założeniem bezpiecznym i powinno wystarczyć.
Pokombinuję jeszcze tak sam dla siebie :)

post wyedytowany przez Kyahn 2020-12-17 16:16:46
Forum: Jak usunąć konkretny znak z konkretnych linii XMLa?