2013-06-04 2 views
1

Я должен отображать банковские счета Новой Зеландии и Австралии в отчетах, отформатированных в соответствии с пользовательским форматом, предоставленным пользователем. Например, банковские счета NZ могут быть 00-0000-0000000-000, причем последняя цифра (суффикс банковского счета) является необязательной. Есть две части формата:Отображение формы банковского счета Новой Зеландии

  • Размещение черточек
  • 2 цифры префиксов

Примеры отформатированные банковские счета могут быть 01-1234-1234567-55 и 01-1234-1234567-002 , Банковские счета хранятся в базе данных без форматирования. Когда я попробовал String.Format («{0: 00-0000-0000000-00 #}», 121234123456712), он не возвращает ожидаемые 12-1234-1234567-12, но 01-2123-4123456-712.

Понятно, что я всегда мог проверять длину банковского счета и выполнять оператор switch, но формат определяется пользователем.

Ниже обеспечивает черточки расположены правильно и суффикс правильно:

// ensure there is a format to use and a bank account is present 
if (bankaccountformat != "" && bankaccountformat.Contains('-') && bankaccount != "") 
{ 
    int i = 0; 
    foreach (char dash in bankaccountformat) 
    { 
    // add dash in bank account, if bank account is long enough 
    if (dash == '-' && bankaccount.Length > i) 
    { 
     bankaccount = bankaccount.Insert(i, "-"); 
    } 
    i++; 
    } 
} 

Вопрос не, если учетная запись является действительным или нет, это форматирование. Пожалуйста, дайте мне знать о том, как лучше форматировать учетную запись.

ответ

0

Вы не упомянули, какой язык программирования вы используете. Во всяком случае, похоже, вы используете массив. Это может быть сложно.

В BASH я хотел бы использовать манипуляции со строками, как в этом сценарии (FMAT):

#!/bin/bash 

#only numbers allowed 
[[ ! "$1" =~ ^[0-9]+$ ]] && echo "Error: enter numbers only" && exit 

s=$1 
l=${#s} 
r=l-13 

#minimal number of digits is 13, maximum 16 
[[ r -lt 0 || r -gt 3 ]] && echo "Error: enter 13-16 digits" && exit 

#first 13 digits 
a=${s:0:2}"-"${s:2:4}"-"${s:6:7} 

#when 14-16 digits 
a=$a"-"${s:13:r} 

echo $a 

FMAT 011234123456755 дает 01-1234-1234567-55

FMAT 0112341234567002 дает 01-1234-1234567- 002

FMAT 0112341234567 дает 01-1234-1234567

Если вы используете что-то другое, чем BASH, то, по крайней мере, это дает некоторые намеки.

+0

Я забыл упомянуть, что я использую C# –

+0

О, строковые манипуляции на C# тоже легки. Я не использую C#, поэтому я не могу предоставить сценарий, но надеюсь, что вы получите эту идею. – linuph

Смежные вопросы