Centrum skryptów - Systemy operacyjne

Jak sformatować ciąg liczb jako numer telefonu?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak sformatować ciąg liczb jako numer telefonu?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak sformatować ciąg liczb jako numer telefonu, używając powłoki Windows PowerShell?

-- HR

Cześć Skrypciarze! Odpowiedź

Cześć, HR. Wiesz HR, w formatowaniu chodzi przede wszystkim o to, żeby pewne rzeczy upięknić, żeby się lepiej prezentowały. Dlatego też Skrypciarz piszący te słowa zawsze czuje się jakoś dziwnie, kiedy ludzie zadają właśnie jemu pytania dotyczące formatowania. Żeby było pięknie, żeby się lepiej prezentowało? W chwili obecnej, Skrypciarz piszący te słowa ma na sobie rozciągniętą podkoszulkę z wizerunkiem Homera Simpsona i cytatem „Jeżeli coś jest trudne, nie warto tego robić”, wytarte dżinsy i stare tenisówki (za to z nowymi sznurówkami). Cały ten zestaw ukoronowany jest dżokejką z napisem „Japonia”. I ten właśnie Skrypciarz ma zabierać głos w sprawie lepszej prezencji i mówić co należy zrobić, żeby coś wyglądało trochę ładniej?

Uwaga. Jeżeli myślicie, że Skrypciarz piszący te słowa wygląda źle, cóż - należałoby opisać innych Skrypciarzy.
Albo może lepiej nie.

Ale co tam, zobaczymy co da się zrobić w sprawie tego pytania. Załóżmy, że w oknie konsoli Windows PowerShell wpisaliśmy następujące polecenie:

$a = 5551234567

Ładnie, jednak tak naprawdę chcemy zmienić format $a tak, żeby otrzymać co następuje:

(555) 123-4567

Jak więc to zrobić? Używając, rzecz jasna, poniższego zwykłego ciągu formatującego:

$b = "{0:(###) ###-####}" -f $a

Zobaczmy jak to działa. Jeżeli chodzi o formatowanie liczb i dat, powłoka Windows PowerShell nie posiada specjalnych wierszy poleceń, odpowiadających funkcjom skryptu VBScript – funkcji FormatDate oraz FormatNumber; zamiast tego, do formatowania liczb, powłoka PowerShell wykorzystuje platformę .NET Framework. Wadą stosowania platformy .NET jest to, że wymaga ona skomplikowanej składni pokazanej powyżej. A zalety stosowania platformy .NET? Za jej pomocą można tworzyć niestandardowe formaty wyświetlania danych, na przykład przekształcając ciąg cyfr w numer telefonu.

Żeby zrozumieć to trochę lepiej, rozłóżmy nasze polecenie na części pierwsze. Stosujemy tutaj format dla zmiennej $a; ten zakręcony fragment w cudzysłowie to właśnie stosowany format (szczegóły za moment), natomiast parametr –f to sygnał dla powłoki Windows PowerShell, że robimy coś z formatowaniem. Wartość, która ma zostać sformatowana ($a) występuje po parametrze –f, a nowo sformatowana wartość zostaje przypisana do zmiennej o nazwie $b. Ale nie, w zasadzie nie musimy przypisywać nowo sformatowanej wartości do żadnej zmiennej; gdybyśmy chcieli, moglibyśmy zastosować poniższe polecenie i po prostu ją wyświetlić:

"{0:(###) ###-####}" -f $a

A co mamy teraz zrobić z tą dziwnie wyglądającą składnią? Jak widzimy, cały ciąg formatowania umieszczony jest najpierw w cudzysłowie, a potem jeszcze w nawiasach klamrowych: "{0:(###) ###-####}". Dalej mamy 0, po którym następuje dwukropek: 0:. Jest to znak, który mówi powłoce Windows PowerShell, że chcemy sformatować pierwszy element (element 0). Na razie uznajemy to za wartość domyślną i stosujemy0: bez zbędnego zastanawiania się nad tym.

To, nad czym naprawdę musimy się zastanowić (lub co powinniśmy przynajmniej zrozumieć) to sam ciąg formatowania: (###) ###-####. Jeżeli wydaje nam się, że: „To trochę przypomina numer telefonu”, to dobrze. W sumie to powinno wyglądać jak numer telefonu. W tym ciągu formatowania, każdy znak krzyżyk (#) reprezentuje jakąś cyfrę; nawiasy okrągłe i łączniki reprezentują nawiasy okrągłe i łączniki. Chcemy przez to powiedzieć, że mamy zamiar zastosować następujący format:

  • Nawias otwarty z następującymi po nim trzema cyframi.
  • Nawias zamknięty i spacja.
  • Trzy cyfry oraz łącznik.
  • Ostatnie cztery cyfry

Oznacza to, że wartość wyglądającą tak: 5551234567 wyświetlimy w następujący sposób:

(555) 123-4567

Oto on: nasz numer telefonu.

Skoro już jesteśmy przy tym temacie, istnieje jeszcze kilka innych poleceń dotyczących formatowania, które mogą być użyteczne. I tak, przypuśćmy, że chcemy sformatować jakąś wartość przy użyciu zer prowadzących. Przykład:

$a = 123

"{0:000000}" -f $a

Co otrzymamy po zastosowaniu tych dwóch poleceń? Właśnie to:

000123

A może by tak określona liczba miejsc po przecinku? Trzy wystarczą? Dobra, zrobione:

$a = 123.456789

"{0:#.000}" -f $a

W wyniku tego otrzymamy coś, co wygląda następująco (zauważmy, że wartość została zaokrąglona do najbliższego miejsca po przecinku):

123.457

Poniżej mamy wartość stosującą dolary amerykańskie jako format; zwróćmy uwagę na symbol $ znajdujący się na początku ciągu formatującego:

$a = 123.45

"{0:$#.00}" -f $a

To nam daje wartość wyglądającą tak:

$123.45

Podobne czynności można wykonać w przypadku dat. Ale to już opowieść na jakiś inny dzień.

Mamy nadzieję, że to pomoże. I pamiętajmy, zawsze, gdy w grę wchodzą kwestie estetyki i dobrej prezencji, Skrypciarze służą pomocą. Nawet, gdyby chodziło o dekorację wnętrz, czy temu podobne. Chociaż pewnie mało kto chciałby w ogóle przebywać w miejscu tak ascetycznie urządzonym jak biuro Skrypciarza piszącego te słowa.

Do początku strony Do początku strony

Centrum skryptów - Systemy operacyjne