1s usuwają spacje w zapytaniu. Usuwanie spacji niełamliwych

Często zdarza się, że podczas ładowania i rozładowywania danych z 1C 8.2 i 8.3 w liczbach znajdują się spacje, które uniemożliwiają normalne przetwarzanie danych. Rozwiązanie tego problemu jest bardzo proste.

Zastanów się, jakie są rodzaje luk.

Spacje mogą być dwojakiego rodzaju:

  • niezniszczalna przestrzeń;
  • „zwykła” luka.

Usuwanie spacji niełamliwych

Reprezentacja ciągu = ciąg (liczba); // system zapisze do zmiennej "10 000"

Usuwanie takich spacji w 1C jest bardzo proste dzięki funkcji formatu liczb:

Liczba = Format(10000, "CH=");

Reprezentacja ciągu = ciąg (liczba); // system zapisze do zmiennej "10000"

Ustawiamy grupowanie w ciągu formatu na pustą wartość (możesz też wpisać "0").

Jeśli typ danych jest już „string”, można użyć następującej metody:

StringRepresentation = StrReplace(String(StringRepresentation), Characters.NPP, ""); // zmienna StringRepresentation miała wartość „10 000”, stała się „10000”

Oznacza to, że po prostu zastąpiliśmy spację nierozdzielającą (Symbols.NPP) w ciągu pustą wartością.

Regularne spacje

Usunięcie zwykłego odstępu w sznurku jest tak proste, jak łuskanie gruszek. Wystarczy wykonać następującą funkcję:

StringRepresentation = StrReplace(String(StringRepresentation), "", ""); // „10 000” stało się „10 000”

Przykład jest podobny do poprzedniej metody. Jednak zamiast Symbols.npp używamy ciągu znaków z pojedynczą spacją.

Jeśli zaczynasz uczyć się programowania 1C, polecamy nasze bezpłatny kurs(nie zapomnij zasubskrybuj youtube - Nowe filmy są regularnie publikowane.

Ciągi w 1C 8.3 we wbudowanym języku 1c są wartościami typu prymitywnego Linia. Wartości tego typu zawierają ciąg znaków Unicode o dowolnej długości. Zmienne typu string to zestaw znaków ujętych w cudzysłów.

Przykład 1. Stwórzmy zmienną łańcuchową z tekstem.

StringVariable = "Witaj świecie!";

Funkcje do pracy ze strunami w 1s 8.3

W ta sekcja podane zostaną główne funkcje, które pozwalają na zmianę linii w 1s, lub analizę zawartych w nich informacji.

SiłaDługość

SiłaDługość(<Строка>) . Zwraca liczbę znaków zawartych w ciągu przekazanym w parametrze.

Przykład 2. Policzmy liczbę znaków w ciągu "Witaj świecie!".

String = "Witaj świecie!"; Liczba znaków = StrLength(ciąg); Raport (liczba znaków);

Wynikiem wykonania tego kodu będzie wyświetlenie liczby znaków w ciągu: 11.

Skrócony

Skrót(<Строка>) . Odcina nieistotne znaki na lewo od pierwszego znaczący symbol w kolejce.
Nieistotne postacie:

  • przestrzeń;
  • niezniszczalna przestrzeń;
  • zestawienie;
  • powrót przewozu;
  • tłumaczenie linii;
  • tłumaczenie formularza (strony).

Przykład 3. Usuń wszystkie spacje z lewej strony ciągu „pokój!” i dołącz do niego ciąg "Hello".

String = abbr("świat!"); Ciąg = „Cześć”+Ciąg; Powiadom (ciąg);

Wynikiem wykonania tego kodu będzie wyświetlenie napisu „Hello world!”.

Skrót

skrót (<Строка>) . Przycina nieznaczące znaki z prawej strony pierwszego znaczącego znaku w ciągu.

Przykład 4. Formularz z ciągów "Hello" i "world!" fraza „Witaj świecie!”

String = abbr("Cześć")+" "+abbr("świat!"); Powiadom (ciąg);

Skrót LP

Skrócony LP (<Строка>) . Przycina nieznaczące znaki z prawej strony pierwszego znaczącego znaku w ciągu, a także przycina nieznaczące znaki z lewej strony pierwszego znaczącego znaku w ciągu. Ta funkcja używany częściej niż dwa poprzednie, ponieważ jest bardziej wszechstronny.

Przykład 5. Usuń nieistotne znaki z lewej i prawej strony nazwy kontrahenta.

Wykonawca = Directorys.Contractors.FindBy Details("TIN", "0777121211"); ContractorObject = Contractor.GetObject(); ContractorObject.Description = Skrócony LP(ContractorObject.Description); ContractorObject.Write();

Lew

Lew(<Строка>, <ЧислоСимволов>) . Pobiera pierwsze znaki ciągu, liczba znaków jest określona w parametrze Liczba znaków.

Przykład 6. Niech struktura Pracownik zawierać imię, nazwisko i patronim pracownika. Uzyskaj ciąg z nazwiskiem i inicjałami.

InitialName = Lion(Pracownik.Imię, 1); Inicjał patronimiczny = Lew (Pracownik.Patronimiczny, 1); FullName = Employee.LastName + " " + Inicjał imienia + "." + inicjał patronimiczny + ".";

Prawa

Prawidłowy(<Строка>, <ЧислоСимволов>) . Pobiera ostatnie znaki ciągu, liczba znaków jest określona w parametrze Liczba znaków. Jeśli określona liczba znaków przekracza długość ciągu, zwracany jest cały ciąg.

Przykład 7. Niech data w formacie „rrrrmmdd” zostanie zapisana na końcu zmiennej string, pobierz ciąg z datą i przekonwertuj go na typ data.

String = "Aktualna data: 20170910"; CiągDane = Prawa (ciąg, 8); Data = Data (StringDate);

Środa

Środa(<Строка>, <НачальныйНомер>, <ЧислоСимволов>) . Pobiera podciąg z ciągu przekazanego w parametrze Linia, zaczynając od znaku, którego liczba jest określona w parametrze Numer początkowy a długość przekazana do parametru Liczba znaków. Numeracja znaków w ciągu zaczyna się od 1. Jeśli parametr Numer początkowy podano wartość mniejszą lub równą zero, to parametr przyjmuje wartość 1. Jeśli parametr Liczba znaków nie określono, wybierane są znaki do końca ciągu.

Przykład 8. Niech zmienna string zawiera kod regionu zaczynając od dziewiątej pozycji, powinieneś go pobrać i zapisać w osobnym wierszu.

String = "Region: 99 Moskwa"; Region = Średnia (wiersz, 9, 2);

Znajdź stronę

StrFind(<Строка>, <ПодстрокаПоиска>, <НаправлениеПоиска>, <НачальнаяПозиция>, <НомерВхождения>) . Wyszukuje określony podciąg w ciągu, zwraca numer pozycji pierwszego znaku znalezionego podciągu. Rozważ parametry tej funkcji:

  • Linia. Ciąg źródłowy;
  • Wyszukiwanie podciągów. Pożądany podciąg;
  • KierunekSzukaj. Określa kierunek wyszukiwania podciągu w ciągu. Może przyjmować wartości:
    • Kierunek wyszukiwania.Od początku;
    • Kierunek wyszukiwania.Od końca;
  • Pozycja startowa. Określa pozycję w ciągu, od której należy rozpocząć wyszukiwanie;
  • Numer wpisu. Określa liczbę wystąpień szukanego podciągu w ciągu źródłowym.

Przykład 9. W wierszu „Witaj świecie!” określić pozycję ostatniego wystąpienia znaku „i”.

PositionNumber = StrFind("Hello World!", "and", SearchDirection.From End); Powiadom (numer pozycji);

Wynikiem wykonania tego kodu będzie wyświetlenie na ekranie numeru ostatniego wystąpienia symbolu „i”: 9.

Vreg

VReg(<Строка>) . Konwertuje wszystkie znaki określonego ciągu na 1s 8 na wielkie litery.

Przykład 10. Przekształć ciąg "hello world!" na wielkie litery.

StringVreg = Vreg("Witaj świecie!"); Raport(StringVreg);

Wynikiem wykonania tego kodu będzie wyświetlenie napisu "HELLO WORLD!"

HRreg

HRreg(<Строка>) . Konwertuje wszystkie znaki określonego ciągu na 1s 8 na małe litery.

Przykład 11. Przekształć ciąg „HELLO WORLD!” małymi literami.

StringNreg = NReg("WITAJCIE ŚWIECIE!"); Raport(StringVreg);

Wynikiem wykonania tego kodu będzie wyświetlenie napisu "hello world!"

TReg

TReg(<Строка>) . Konwertuje ciąg w następujący sposób: pierwszy znak każdego słowa jest konwertowany na wielkie litery, pozostałe znaki słowa są konwertowane na małe litery.

Przykład 12. Zamień pierwsze litery słów w łańcuchu „hello world!” na wielką literę.

StringTreg = TReg("Witaj świecie!"); Raport(StringTreg);

Wynikiem wykonania tego kodu będzie wyświetlenie napisu "Hello World!"

Symbol

Symbol(<КодСимвола>) . Pobiera znak według jego kodu Unicode.

Przykład 13. Dodaj lewą i prawą stronę do wiersza "Hello World!" symbol ★

StringWithStars = Character("9733")+"Hello World!"+Character("9733"); Raport(CiągZGwiazdami);

Wynikiem wykonania tego kodu będzie wyświetlenie napisu „★Hello World!★”

Kod symbolu

Kod symbolu (<Строка>, <НомерСимвола>) . Pobiera kod znaku Unicode z ciągu określonego w pierwszym parametrze znajdującego się w pozycji określonej w drugim parametrze.

Przykład 14. Znajdź kod ostatni znak w wierszu „Witaj świecie!”.

String = "Witaj świecie!"; KodZnaku =KodZnaku(Ciąg, StrLength(Ciąg)); Powiadom (Kod Znaku);

Wynikiem wykonania tego kodu będzie wyświetlenie kodu symbolu „!” — 33.

Pusta linia

Pusta linia (<Строка>) . Sprawdza, czy ciąg składa się tylko z nieznaczących znaków, to znaczy, czy jest pusty.

Przykład 15. Sprawdź, czy ciąg jest pusty i składa się z trzech spacji.

Pusty = EmptyString(" "); Raport (pusty);

Wynikiem wykonania tego kodu będzie wyświetlenie słowa "Tak" (wyrażenie łańcuchowe o wartości logicznej Prawdziwe).

StrReplace

StrZamień(<Строка>, <ПодстрокаПоиска>, <ПодстрокаЗамены>) . Znajduje wszystkie wystąpienia podciągu wyszukiwania w ciągu źródłowym i zastępuje go zastępczym podciągiem.

Przykład 16. W wierszu „Hello World!” zastąpić słowo „Świat” słowem „Przyjaciele”.

String = StrReplace("Witaj świecie!", "Świat", "Przyjaciele"); Powiadom (ciąg);

Wynikiem wykonania tego kodu będzie wyświetlenie napisu „Hello Friends!”

Liczba wierszy

StrLiczba linii(<Строка>) . Pozwala policzyć liczbę wierszy w ciągu wielowierszowym. Aby przejść do nowej linii w 1s 8, używany jest symbol PS(znak wysuwu wiersza).

Przykład 17. Określ liczbę wierszy w tekście:
"Pierwsza linia
Druga linia
Trzecia linia"

Number = StrNumber of Lines("Pierwsza linia"+Symbols.PS +"Druga linia"+Symbols.PS +"Trzecia linia"); Numer raportu);

Wynikiem wykonania tego kodu będzie wyświetlenie ilości linii w tekście: 3

StrGetString

StrGetString(<Строка>, <НомерСтроки>) . Pobiera ciąg w ciągu wielowierszowym według jego numeru. Numeracja linii zaczyna się od 1.

Przykład 18. Pobierz ostatnią linię w tekście:
"Pierwsza linia
Druga linia
Trzecia linia"

Tekst = "Pierwsza linia"+Znaki.PS +"Druga linia"+Znaki.PS +"Trzecia linia"; LastLine = StrGetLine(tekst, Strliczba linii(tekst)); Powiadom (ostatnia linia);

Wynikiem wykonania tego kodu będzie wyświetlenie wiersza „Trzecia linia”.

Liczba wystąpień

LiczbaWystąpieńStr.(<Строка>, <ПодстрокаПоиска>) . Zwraca liczbę wystąpień określonego podciągu w ciągu. W funkcji rozróżniana jest wielkość liter.

Przykład 19. Określ, ile razy litera „c” wchodzi w wiersz „Linie w 1s 8.3 i 8.2”, niezależnie od jej wielkości.

String = "Linie w 1s 8.3 i 8.2"; Liczba wystąpień = strLiczba wystąpień(Vreg(ciąg), "C"); raport (liczba zdarzeń);

W wyniku wykonania tego kodu na ekranie pojawi się liczba wystąpień: 2.

Strona zaczyna się od

Str zaczyna się od (<Строка>, <СтрокаПоиска>) . Sprawdza, czy ciąg podany w pierwszym parametrze zaczyna się od ciągu w drugim parametrze.

Przykład 20. Ustal, czy NIP wybranego kontrahenta zaczyna się od liczby 1. Niech zmienna kontrahent Kontrahenci.

NIP = Wykonawca.NIP; StartsCUnits = StrStartsC(TIN, "1"); If StartsFROM1 Then //Twój kod EndIf;

Strona kończy się w dniu

atuty(<Строка>, <СтрокаПоиска>) . Sprawdza, czy ciąg przekazany w pierwszym parametrze kończy się ciągiem w drugim parametrze.

Przykład 21. Ustal, czy NIP wybranego kontrahenta kończy się cyfrą 2. Niech zmienna kontrahent link do elementu katalogu jest przechowywany Kontrahenci.

NIP = Wykonawca.NIP; kończy się na dwa = Str kończy się na (TIN, "2"); Jeśli kończy się na dwa, to //Twój kod EndIf;

Podział strony

StrPodziel(<Строка>, <Разделитель>, <ВключатьПустые>) . Dzieli ciąg na części według określonych znaków ogranicznika i zapisuje wynikowe ciągi w tablicy. Pierwszy parametr przechowuje oryginalny ciąg, drugi zawiera ciąg zawierający ogranicznik, trzeci parametr wskazuje, czy do tablicy należy zapisywać puste ciągi (domyślnie Prawdziwe).

Przykład 22. Załóżmy, że mamy ciąg zawierający liczby oddzielone symbolem „;”, pobierz tablicę liczb z ciągu.

Ciąg = "1; 2; 3"; Tablica = StrSplit(Ciąg, ";"); Dla Count = 0 By Array.Quantity() - 1 próba pętli Array[Count] = Number(Ablp(Array[Count])); Tablica wyjątków[W] = 0; EndTry EndCycle;

W wyniku wykonania uzyskana zostanie tablica z liczbami od 1 do 3.

StrConnect

StrPołącz(<Строки>, <Разделитель>) . Konwertuje tablicę ciągów z pierwszego parametru na ciąg zawierający wszystkie elementy tablicy przy użyciu ogranicznika określonego w drugim parametrze.

Przykład 23. Używając tablicy liczb z poprzedniego przykładu, pobierz oryginalny ciąg.

Dla Count = 0 By Array.Quantity() - 1 Pętla Tablica[Liczba] = String(Array[Liczba]); Zakończ cykl; String = StrConnect(Tablica, "; ");

Typ String występuje we wszystkich językach programowania. Jest prymitywny, aw 1C istnieje wiele funkcji do pracy z nim. W tym artykule przyjrzymy się bliżej różne drogi pracuj z typami ciągów w 1C 8.3 i 8.2 z przykładami.

Linia

Aby przekonwertować zmienną dowolnego typu na ciąg znaków, istnieje funkcja o tej samej nazwie „String()”. Parametrem wejściowym będzie sama zmienna, której reprezentacja w postaci ciągu ma zostać uzyskana.

String(False) // zwraca "Nie"
String(12345) // zwraca "12 345"
String(CurrentDate()) //"21.07.2017 11:55:36"

Możliwe jest przekonwertowanie do ciągu nie tylko typów pierwotnych, ale także innych, na przykład elementów katalogów i dokumentów.

Skrót LP, Skrót L, Skrót P

Parametry wejściowe tych funkcji są zmienną typu string. Funkcje usuwają nieistotne znaki (spacje, powrót karetki itp.): od lewej i prawa strona, odpowiednio tylko po lewej stronie i tylko po prawej stronie.

abbrl("Spacje po obu stronach zostaną usunięte") // "Spacje po obu stronach zostaną usunięte"
abbr("Spacje po obu stronach zostaną usunięte") // "Spacje po lewej stronie zostaną usunięte"
abbr(" Spacje po obu stronach zostaną usunięte ") // "Spacje po prawej stronie zostaną usunięte"

Lew, Prawy, Środkowy

Te funkcje umożliwiają odcięcie części łańcucha. Funkcja Lion() zwróci część łańcucha znajdującą się po jego lewej stronie o określonej długości. Funkcja „Right()” jest podobna, ale przycinanie odbywa się po prawej stronie. Funkcja „Wed()” pozwala określić numer znaku, z którego zostanie wybrany ciąg oraz jego długość.

Lion("Zmienna łańcuchowa", 4) // zwraca "Stro"
Right("String variable", 7) // zwraca "variable"
avg("Zmienna łańcuchowa", 2, 5)// zwraca "troco"

SiłaDługość

Funkcja określa liczbę znaków zawartych w zmiennej łańcuchowej.

StrLength("Word") // wynikiem wykonania będzie liczba 5

Odnaleźć

Funkcja umożliwia wyszukanie części łańcucha w zmiennej łańcuchowej. Zwracana wartość będzie liczbą wskazującą pozycję początku znalezionego ciągu. Jeśli nie zostaną znalezione żadne dopasowania, zwracane jest zero.

Pamiętaj, że w wyszukiwaniu rozróżniana jest wielkość liter. Jeśli w oryginalnym ciągu występuje więcej niż jedno wystąpienie podciągu wyszukiwania, funkcja zwróci początek pierwszego wystąpienia.

Znajdź("jeden, dwa, jeden, dwa, trzy", "dwa") // funkcja zwróci liczbę 6

Pusta linia

Użycie tej funkcji pozwala określić, czy ciąg jest pusty. Nieistotne znaki, takie jak spacja, powrót karetki i inne, nie są brane pod uwagę.

EmptyString("Wasilij Iwanowicz Pupkin") // funkcja zwróci False
EmptyString(" ") // funkcja zwróci True

VReg, NReg, TReg

Funkcje te są bardzo przydatne podczas porównywania i konwertowania zmiennych łańcuchowych. „Vreg()” zwróci oryginalny ciąg wielkimi literami, „HReg()” małymi literami, a „TReg()” sformatuje go tak, aby pierwszy znak każdego słowa był pisany wielką literą, a wszystkie kolejne znaki były małe.

VReg("DYREKTOR GENERALNY") // zwraca wartość - "DYREKTOR GENERALNY"
HReg("DYREKTOR GENERALNY") // zwracana wartość to "CEO"
TReg("DYREKTOR GENERALNY") // zwracana wartość - "Dyrektor Generalny"

StrReplace

Ta funkcja jest analogiczna do zamiany w edytory tekstu. Pozwala zamienić jeden znak lub zestaw znaków na inny w zmiennych łańcuchowych.

StrReplace("czerwony, biały, żółty", ",", ";") // zwraca "czerwony; biały; żółty"

Liczba wierszy

Funkcja pozwala określić liczbę wierszy oddzielonych znakiem powrotu karetki w zmiennej tekstowej.

Pętla w poniższym przykładzie przejdzie przez trzy koła, ponieważ funkcja StrNumberRows zwróci wartość 3:

Dla ind \u003d 1 by StrNumber of Lines („Linia1” + Symbols.PS + „String2” + Symbols.PS + „Line3”) Pętla
<тело цикла>
Zakończ cykl;

StrGetString

Ta funkcja działa z tekstem wielowierszowym w taki sam sposób, jak poprzednia. Pozwala uzyskać pewna struna ze zmiennej tekstowej.

StrGetString("Ciąg1" + Symbole.PS + "Ciąg2" + Symbole.PS + "Ciąg3", 2) // zwraca "Linia 2"

Liczba wystąpień

Funkcja zlicza liczbę wystąpień znaku lub podciągu w wyszukiwanym ciągu.

StrNumberInstallations("a;b;c;d; ", ";") // funkcja zwróci liczbę 4

Symbol i kod symbolu

Funkcje te pozwalają uzyskać znak za pomocą jego kodu Unicode, a także określić ten kod za pomocą samego znaku.

SymbolCode("A") // funkcja zwróci liczbę 1 040
SymbolCode(1040) // funkcja zwróci "A"

Częste zadania podczas pracy ze strunami

Łączenie ciągów

Aby połączyć wiele ciągów (konkatenować) wystarczy użyć operatora dodawania.

"Linia 1" + "Linia 2" //wynik dodania dwóch linii będzie "Linia 1 Linia 2"

Konwersja typu

Aby przekonwertować typ na łańcuch, na przykład odwołanie do elementu słownika, liczbę itp., wystarczy użyć funkcji „String()”. Funkcje takie jak „ShortLp()” również konwertują zmienne na ciąg, ale natychmiast z odcięciem nieistotnych znaków.

String(1000) // zwróci "1000"

Należy pamiętać, że podczas konwersji liczby na łańcuch program automatycznie dodawał spację oddzielającą tysiąc. Aby tego uniknąć, możesz użyć następujących struktur:

StrReplace(String(1000),Characters.NPP,"") // zwraca "1000"

String(Format(1000,"CH=")) // zwróci "1000"

Cytaty w ciągu

Dość często będziesz miał do czynienia z koniecznością umieszczania cudzysłowów w zmiennej łańcuchowej. Może to być tekst zapytania wpisany w konfiguratorze lub po prostu zmienna. Aby rozwiązać ten problem, wystarczy ustawić dwa znaki cudzysłowu.

Header = String("Horns and Hooves LLC to my!") // zwraca "Roga and Hooves LLC to my!"

Wielowiersz, podział wiersza

Aby stworzyć tekst wielowierszowy wystarczy dodać do niego znaki łamania linii (Symbols.PS).

MultilineText = "Pierwsza linia" + Znaki.PS + "Druga linia"

Jak usunąć spacje

Aby usunąć spacje po prawej lub lewej stronie, możesz użyć funkcji "StretchLp()" (a także "Scrpt()" i "ScreenP()"):

StringNoSpaces = Abbreviation(" Wiele liter ") // funkcja zwróci wartość "Wiele liter"

Jeśli po zamianie liczby na łańcuch musisz usunąć spacje nierozdzielające, zastosuj następującą konstrukcję:

StringWithoutSpaces = StrReplace(String(99999),Characters.NPP,"") // zwraca "99999"

Ponadto programiści często używają następującej konstrukcji, która pozwala usunąć lub zastąpić wszystkie spacje zmiennej tekstowej innym znakiem:

StringWithoutSpaces = StrReplace(" cześć", " " ,"") // zwraca "cześć"

Porównując struny ze sobą

Możesz porównać warunki ze zwykłym znakiem równości. W porównaniu rozróżniana jest wielkość liter.

"hello" = "hello" // zwróci false
"Hello" = "Hello" // zwróci True
"Hello" = "Do widzenia" // zwróci False