0

Can i Convert an spss(.sav) file to a .csv file by using C#. Here i want to browse 1 .sav file and i need to generate .csv file of the same.Can anyone provide any link or code for the conversion.

i have some 100 spss files so i need to create a console app which will take each file from the parent folder and generate the corresponding csv file for each sav file

user3501613
  • 596
  • 7
  • 28

1 Answers1

3

There are several possibilities:

1) Use a library

There seems to be a library to read SPSS files.

You can install the NuGet package SpssLib and create a SpssReader object from a FileStream

using(var fileStream = File.OpenRead("spss-file.sav"))
{
    var spssReader = new SpssReader(fileStream);
    // read variable names from spssReader.Variables and store to CSV
    // read records from spssReader.Records and store to CSV
}

2) Hand-code the solution

If you can't use the library for whatever reason, you may hand-code a solution.

2.1) Have a look at PSPP

If (and only if) you are planning (or at least fine with) releasing your code under the GPL, you can have a look at the PSPP source code. Anyway, if you can't GPL your code, Don't. Do. It. Do a clean-room implementation instead, since otherwise you'll always be on slippery grounds.

2.2) Have a look at the spec

There is a documentation of the SAV file format online. It may take some time, but you may eventually figure out how to convert this to CSV.

3) Use PSPP

If you have no problem shipping a GPLed software (or are able to download the files on demand somehow), you can make use of PSPPs console application. PSPP is a GNU replacement for SPSS, which aims at (but does not, yet) providing the funcitonality that SPSS provides. Obviously it comes with a handy little CLI tool pspp-convert (see the documentation). You can invoke it via the command line with

pspp-convert input.sav output.csv

With the help of the Process class you're able to start another process (i.e. program in this case). If pspp-convert is located in the current directory or in any directory that's in the PATH variable, converting a file to CSV is a easy as

public ConvertSpssFile(string inputFile)
{
    var outputFile = Path.ChangeExtension(inputFile, "csv");
    Process.Start("pspp-convert", $"{inputFile} {outputFile}");
}
Paul Kertscher
  • 9,416
  • 5
  • 32
  • 57