2016-11-08 45 views
0

我想從數據庫Microsoft SQL中檢索我的記錄並將其寫入到.txt文件中。我的代碼正常工作,但PadRight()不是。我PadRight()不工作 - Visual Basic

我的問題是:爲什麼我的PadRight()不工作? *即使我將PadRight()放在其他列名稱中,它仍然不起作用。

輸出:如果我放行(「ProcessDate」.PadRight(9)),它應該只顯示6字符值而不是整個值。

例如:如果從數據庫中的Microsoft SQL一個ProcessDate的值是 2016年11月8日31342 輸出應該是:2016年11月8日

我的代碼:

For Each row As DataRow In table.Rows 
    swMonetary.WriteLine(String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}", 
     row("ProcessDate".PadRight(6)), 
     row("SubscriberAccountNumber"), 
     row("PayorName"), 
     row("ParNumber"), 
     row("MemberType"), 
     row("ApplicablePeriodStart"), 
     row("ApplicablePeriodEnd"), 
     row("TransactionAmount"), 
     row("PaymentType"), 
     row("CheckNo"))) 
    count += 1 
Next 
+0

這不是什麼['String.PadRight()'](https://msdn.microsoft.com/en-us/library/34d75d7s(v = vs.110).aspx)。你想使用['String.Substring()'](https://msdn.microsoft.com/en-us/library/system.string.substring(v = vs.110).aspx)。 – Phylogenesis

+2

多數民衆贊成也不是如何Padright的工作 - 你是填充文字「ProcessDate」,而不是它的價值:行(「ProcessDate」)。ToString()。PadRight(6)' – Plutonix

+2

如果它是一個DateTime列使用它方法來格式化結果:'Convert.ToDateTime(row(「ProcessDate」))。ToString(「dd/MM/yyyy」)' – Plutonix

回答

1

PadRight方法工作對齊和添加空格(默認情況下)到字符串。 如果總寬度小於字符串長度,它將返回對原始字符串的引用。 所以,它不會縮短你的字符串。 我吸收你看看Substring方法。

正如ChrisF在評論中提到的那樣,Substring解決方案只能部分解決問題。

如果,當然,row("ProcessDate")總會給你一個有效的日期,你可以改變你的格式字符串爲"{0:dd/MM/yyyy}{1}{2}{3}{4}{5}{6}{7}{8}{9}"

如果它可以是Nothing,有很多解決方案可以用來解決這個問題,我會發佈一個。

For Each row As DataRow In table.Rows 
    Dim dt As DateTime 
    Dim finalValue As String = If(DateTime.TryParse(row("ProcessDate"), dt), dt.ToString("dd/MM/yyyy"), "Default value") 

    swMonetary.WriteLine(String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}", 
     finalValue, 
     row("SubscriberAccountNumber"), 
     row("PayorName"), 
     row("ParNumber"), 
     row("MemberType"), 
     row("ApplicablePeriodStart"), 
     row("ApplicablePeriodEnd"), 
     row("TransactionAmount"), 
     row("PaymentType"), 
     row("CheckNo"))) 
    count += 1 
Next 
  • 如果數據庫返回的日期排在沒有該解決方案將照顧。
  • 還記得要改變「dd/MM/yyyy」格式字符串,以滿足您的需求。
  • 而「默認值」爲默認值:),String.Empty也許。
+1

這裏唯一的問題是Substring(0,9)會截斷像「12/12/2016」 – ChrisF

+0

Hi @PauloJunior,對於其他人怎麼樣?我不只關注ProcessDate表,我對其他類似的「PaymentType」也很感興趣。 – Mikelemuel

+0

對其他人可以使用幾乎相同的方法,如果是日期或小數,可以嘗試解析,就像我展示的日期。如果它是一個字符串,請嘗試我們已經討論過的Substring方法。我將提供的這個鏈接可以真正幫助您爲標準(https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx)或自定義數字格式字符串格式化,您可以如果需要,還可以找到如何格式化日期或枚舉的信息。如果你仍然需要任何幫助來格式化其他領域,給我們更多關於你真正想要的結果的信息,或許是例子。 –

0
For Each row As DataRow In table.Rows 
      Dim dt As DateTime 
      Dim finalValue As String = If(DateTime.TryParse(row("ProcessDate"), dt), dt.ToString("dd/MM/yyyy"), "Default value") 
      Dim SubscriberNumber As String = row("SubscriberAccountNumber") 
      Dim PayorName As String = row("PayorName") 
      Dim ParNumber As String = row("ParNumber") 
      Dim MemberType As String = row("MemberType") 
      Dim Start As String = row("ApplicablePeriodStart") 
      Dim Ends As String = row("ApplicablePeriodEnd") 
      Dim Amount As String = Convert.ToDouble(row("TransactionAmount")) 
      Dim PaymentType As String = row("PaymentType") 
      Dim CheckNo As String = row("CheckNo") 
      swMonetary.WriteLine(String.Format("{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}", finalValue.PadRight(15), SubscriberNumber.PadRight(20), PayorName.PadRight(30), ParNumber.PadRight(20), MemberType.PadRight(20), Start.PadRight(6), Ends.PadRight(6), Amount.PadRight(15), PaymentType.PadRight(10), CheckNo.PadRight(25))) 
      count += 1 
     Next 

我找到了另一個解決方案。 =)