Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1784
  • Last Modified:

Powershell: Padding a string

I'm reading a csv file that has already process a date in the format MMDDYYYY. However, for single-digit months, there is no leading 0. I'd like to "pad" this string so that there's a leading 0.

I know I can do something like this
$file = import-csv c:\temp\myfile.csv

foreach ($line in $file) {
   $date = $line.DATE 
   if($date.Length -lt 8){
       $date = -Join ("0",$date)
    } else {
        # date length is good; do nothing
    }
}

Open in new window


I'm looking for the most efficient way to do this (less code as possible)
Thx
0
bndit
Asked:
bndit
  • 3
  • 3
  • 2
  • +1
2 Solutions
 
Meir RivkinFull stack Software EngineerCommented:
simply parse the date instead of checking
length and stuff:
$file = import-csv c:\temp\myfile.csv

foreach ($line in $file) {
$date = $line.DATA
$date = [DateTime]::Parse($date).ToString("MMDDYYYY")

Open in new window

0
 
bnditAuthor Commented:
what am I doing wrong? See snapshot attached to see how I'm running it (straight on the shell)

Exception calling "Parse" with "1" argument(s): "String was not recognized as a valid DateTime."
At line:1 char:18
+ [DateTime]::Parse <<<< ($date).ToString("MMDDYYYY")
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException
date.png
0
 
Meir RivkinFull stack Software EngineerCommented:
sorry for the confusion, parse and parseExact can't deal with single digit month even when explicitly defined:
$date = "6102013"
$date = [DateTime]::ParseExact($date, "Mddyyyy",[System.Globalization.CultureInfo]::CurrentCulture) 

Open in new window


also in several places i found that ppl use similar methods to detect single digits months (or days) and simply pad with 0 to work with DateTime objects.
you can shorten your line by doing this:
$file = import-csv c:\temp\myfile.csv
foreach ($line in $file) {
  [DateTime]$date = @{$true=("0"+$line.DATE);$false=$line.DATE}[$line.DATE.Length -lt 8] 
}                

Open in new window

0
Simplify Active Directory Administration

Administration of Active Directory does not have to be hard.  Too often what should be a simple task is made more difficult than it needs to be.The solution?  Hyena from SystemTools Software.  With ease-of-use as well as powerful importing and bulk updating capabilities.

 
bnditAuthor Commented:
This article would make me think I could use the static method ParseExact
http://dusan.kuzmanovic.net/2012/05/07/powershell-parsing-date-and-time/

do you know why it's not working?
0
 
Meir RivkinFull stack Software EngineerCommented:
I tested parseExact it wont work with single digit month
0
 
QlemoBatchelor, Developer and EE Topic AdvisorCommented:
How about
foreach ($line in import-csv c:\temp\myfile.csv) {
   $date = $line.DATE.PadLeft(8, '0') 
}

Open in new window

or
import-csv c:\temp\myfile.csv | % { $date = $_.Date.PadLeft(8, '0') }

Open in new window

0
 
bnditAuthor Commented:
Thanks for trying, but I think it's going to be really hard to convert dates given to me in this format since a 1-digit month and 1-digit day are used. Padding left would yield incorrect dates where the date is 1-digit (i.e. 1271950 would yield 01271950 but I really want 12071950).
0
 
QlemoBatchelor, Developer and EE Topic AdvisorCommented:
It is not only hard, it is impossible. Think of 1112013 - is that  01 11 2013 or 11 01 2013 ? I assumed that just the month is missing the leading zero.
0
 
LearnctxEngineerCommented:
It really sounds like the system/application doing the export needs to be rectified rather than production a script or function to compensate for it. I would really investigate why the output is being done incorrectly into the CSV.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Creating Active Directory Users from a Text File

If your organization has a need to mass-create AD user accounts, watch this video to see how its done without the need for scripting or other unnecessary complexities.

  • 3
  • 3
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now