Solved

Need to programatically convert binary files to text

Posted on 2013-01-28
8
352 Views
Last Modified: 2013-02-04
Hello,

We have a few gigs of binary files (full of plain text data) that we need to convert to text only files. Whats the easiest way to do this programatically.

to give you an idea of how we can do it manually - we can open each file in notepad and then "save as" a text file (before anyone asks, simply changing the extension does not do the trick). In case you are wondering why text files are being treated as binary - its the fault of our FTP process, since the files were originally uploaded as binary, they are saved as binay on our windows system.

Thanks in advance.
0
Comment
Question by:CodeWrangler
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
8 Comments
 
LVL 35

Accepted Solution

by:
Robert Schutt earned 500 total points
ID: 38828430
There's a tool for this, try here: http://waterlan.home.xs4all.nl/dos2unix.html#UNIX2DOS
0
 
LVL 30

Expert Comment

by:anarki_jimbel
ID: 38828920
Hmmm... Everything, any text is binary, eventually.

I believe that the encoding is ASCII, isn't it? Try to use

Encoding.ASCII.GetString

method:

http://msdn.microsoft.com/en-us/library/38b953c8.aspx

See a solution like:

http://stackoverflow.com/questions/6006425/binary-to-corresponding-ascii-string-conversion
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 38830113
What do you mean with 'saved as binary file' ?
If you can open them in Notepad, they are not binary.
0
Do you have a plan for Continuity?

It's inevitable. People leave organizations creating a gap in your service. That's where Percona comes in.

See how Pepper.com relies on Percona to:
-Manage their database
-Guarantee data safety and protection
-Provide database expertise that is available for any situation

 
LVL 35

Assisted Solution

by:Robert Schutt
Robert Schutt earned 500 total points
ID: 38830155
I'm assuming it's a problem with line endings, hence my post. You could do it yourself in C# (replace LF with CR/LF) but it's a fairly common problem with a 'standard' solution (at least these kind of utilities are common on Unix/Linux). If the source OS is Mac you need a slightly different solution (I think, replace CR with CR/LF) but it could well be included in those tools, haven't checked.
0
 
LVL 55

Expert Comment

by:Jaime Olivares
ID: 38830169
If there is a CR/LF problem, I think there is no need to write a C# application. this can be done with a batch file. Here are some alternatives:
http://stackoverflow.com/questions/3110031/batch-file-convert-lf-to-crlf
or you can use tool like:
http://cleansofts.org/unix2dos.html
0
 
LVL 35

Assisted Solution

by:Robert Schutt
Robert Schutt earned 500 total points
ID: 38830245
If you really want to, you could use a little console application like this (I only tested with a small file, use only on a copy of the files or after testing with a big file):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace EE_Q_28011639
{
    class Program
    {
        const int bufsiz = 65536;

        const string strLE_Unix = "\n"; // LF
        const string strLE_Mac = "\r"; // CR

        static void Main(string[] args) {
            foreach (string fn in Directory.GetFiles(".", "*.txt", SearchOption.AllDirectories)) {
                try {
                    FileStream fs = File.OpenRead(fn);
                    byte[] fbi = new byte[fs.Length];
                    fs.Read(fbi, 0, fbi.Length);
                    fs.Close();
                    fs = null;
                    string strLE = "";
                    for (int b = 0; b < fbi.Length; b += bufsiz) {
                        string tmp = Encoding.Default.GetString(fbi, b, Math.Min(bufsiz, fbi.Length - b));
                        if (b == 0) { // check first block for existing line endings
                            if (tmp.Contains(System.Environment.NewLine)) {
                                Console.WriteLine("Not converting file '{0}', CR/LF detected", fn);
                                break;
                            } else if (tmp.Contains(strLE_Unix)) {
                                strLE = strLE_Unix;
                                Console.WriteLine("Converting unix file '{0}'", fn);
                            } else if (tmp.Contains(strLE_Mac)) {
                                strLE = strLE_Mac;
                                Console.WriteLine("Converting mac file '{0}'", fn);
                            } else {
                                Console.WriteLine("Not converting file '{0}', no line endings detected at all in first block", fn);
                                break;
                            }
                            fs = File.OpenWrite(fn);
                        }
                        tmp = tmp.Replace(strLE, System.Environment.NewLine);
                        byte[] fbo = Encoding.Default.GetBytes(tmp);
                        fs.Write(fbo, 0, fbo.Length);
                    }
                    if (fs != null) {
                        fs.Flush();
                        fs.Close();
                        fs = null;
                    }
                }
                catch (Exception ex) {
                    Console.WriteLine("Error while processing file '{0}': {1}", fn, ex.Message);
                }
            }
        }
    }
}

Open in new window

0
 

Author Closing Comment

by:CodeWrangler
ID: 38853065
awarding 3 posts from the same user because a combination of the posts got me where i needed to be.
0

Featured Post

Get Database Help Now w/ Support & Database Audit

Keeping your database environment tuned, optimized and high-performance is key to achieving business goals. If your database goes down, so does your business. Percona experts have a long history of helping enterprises ensure their databases are running smoothly.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
When it comes to security, close monitoring is a must. According to WhiteHat Security annual report, a substantial number of all web applications are vulnerable always. Monitis offers a new product - fully-featured Website security monitoring and pr…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…

628 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question