2016-11-08 7 views
0

Ich versuche, meinen Datensatz aus der Datenbank Microsoft SQL abrufen und in eine TXT-Datei schreiben. Mein Code funktionierte richtig, aber PadRight() nicht.Mein PadRight() funktioniert nicht - Visual Basic

Meine Frage ist: Warum funktioniert meine PadRight() nicht? * Auch wenn ich PadRight() in einen anderen Spaltennamen setze, funktioniert es immer noch nicht.

Ausgabe: Wenn ich Zeile ("ProcessDate" .PadRight (9)) setzen, sollte es nur den 6character Wert nicht den ganzen Wert zeigen.

Zum Beispiel: Wenn der Wert eines ProcessDate aus der Datenbank Microsoft SQL ist 2016.11.08 31342 Die Ausgabe sollte: 2016.11.08

Mein Code:

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

Das ist nicht was ['String.PadRight()'] (https://msdn.microsoft.com/en-us/library/34d75d7s (v = vs.110) .aspx) tut. Sie möchten ['String.Substring()'] (https://msdn.microsoft.com/en-us/library/system.string.substring (v = vs.110) .aspx) verwenden. – Phylogenesis

+2

Das ist auch nicht wie Padright funktioniert - Sie padding das Literal "ProcessDate" und nicht den Wert es: "row (" ProcessDate "). ToString(). PadRight (6)' – Plutonix

+2

Wenn es eine DateTime-Spalte ist, verwenden Sie es Möglichkeit, das Ergebnis zu formatieren: 'Convert.ToDateTime (row (" ProcessDate ")). ToString (" TT/MM/JJJJ ")' – Plutonix

Antwort

1

Die Methode PadRight funktioniert zum Ausrichten und Hinzufügen von Leerzeichen (standardmäßig) zur Zeichenfolge. Wenn die Gesamtbreite kleiner als die Stringlänge ist, wird ein Verweis auf die ursprüngliche Zeichenfolge zurückgegeben. Also, es wird nicht Ihre Zeichenfolge kurz. Ich suggest Sie sehen Substring Methode.

Wie von ChrisF in den Kommentaren erwähnt, löst die Substring-Lösung das Problem nur teilweise.

Wenn die row("ProcessDate") Ihnen immer ein gültiges Datum geben wird, können Sie einfach Ihre Formatzeichenfolge für "{0:dd/MM/yyyy}{1}{2}{3}{4}{5}{6}{7}{8}{9}" ändern.

Wenn es ein Nothing sein kann, gibt es viele Lösungen, die Sie verwenden können, um dieses Problem zu lösen, werde ich eins veröffentlichen.

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 
  • wird diese Lösung vorsichtig sein, wenn die Datenbank einen Moment in der Datumszeile zurückgibt.
  • Denken Sie auch daran, "dd/MM/yyyy" für die Formatzeichenfolge zu ändern, die Ihren Anforderungen entspricht.
  • Und die "Default-Wert" für einen Standardwert :), String.Empty vielleicht.
+1

Das einzige Problem hier wäre, dass Teilzeichenfolge (0, 9) Daten wie "12/12/2016" – ChrisF

+0

Hi @PauloJunior schneiden würde, wie wäre es für andere? Ich konzentriere mich nicht nur auf die ProcessDate-Tabelle. Ich bin auch sehr interessiert an der anderen wie "PaymentType" – Mikelemuel

+0

Sie können so ziemlich die gleiche Vorgehensweise für die anderen verwenden, wenn es ein Datum oder eine Dezimalzahl ist, können Sie parse versuchen, genau wie das Datum, das ich zeige. Wenn es sich um eine Zeichenkette handelt, versuchen Sie es mit der bereits beschriebenen Substring-Methode.Diese Links, die ich zur Verfügung stellen werde, können Ihnen bei der Formatierung für Standard (https://msdn.microsoft.com/en-us/library/dwhawy9k(v=vs.110).aspx) oder benutzerdefinierten Zahlenformatzeichenfolgen helfen finden Sie auch Informationen zum Formatieren von Daten oder Enums, wenn Sie benötigen. Wenn Sie noch Hilfe beim Formatieren anderer Felder benötigen, geben Sie uns mehr Informationen darüber, welche Ergebnisse Sie wirklich wollen, vielleicht Beispiele. –

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 

fand ich eine andere Lösung. =)