Tout est dans le titre !
C'est un petit convertisseur qui mets en forme le code Fortran 77 pour qu'il soit compilable et executable par un compilateur Fortran 95.
Par exemple :
- Il modifie les commentaires
- il réagence les lignes de code en repoussant la limite de 72 caractères à 132
Source / Exemple :
private void buttonConvertir_Click(object sender, EventArgs e)
{
if (listFiles.Items.Count == 0)
MessageBox.Show("Pas de fichiers sélectionnés !");
else
{
DialogResult result = MessageBox.Show("Attention !\nCe logiciel ne s'applique qu'au code écrit en Fortran 77 et destiné à être transformé en Fortran 95.\nEtes-vous sur que tous les fichiers sélectionnés contiennent uniquement du code fortran sans Beuge du à la syntaxe ?", "Important !", MessageBoxButtons.YesNo, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button2);
List<String> listFileDone = new List<string>();
List<String> tamponLigne = new List<string>();
if (result == DialogResult.Yes)
{
int numberFileDone = 0;
progressBar1.Visible = true;
foreach (String fileName in listFiles.Items)
{
bool first = true;
StreamReader sr = new StreamReader(fileName);
String newFileName = rightName(fileName);
FileStream newFile = File.Create(newFileName);
newFile.Close();
StreamWriter sw = new StreamWriter(newFileName);
listFileDone.Add(newFileName);
String lastLigne = "";
while (!sr.EndOfStream)
{
String res = sr.ReadLine();
if (res.Length > 5 && res.Substring(0, 5) == " " && res.Substring(5, 1) != " ")
{
tamponLigne.Add(res);
}
else if (tamponLigne.Count != 0)
{
String newLigne = lastLigne;
lastLigne = "";
foreach (String ligne in tamponLigne)
{
if (ligne.Substring(6, 1) == " ")
{
int indice = 6;
while (ligne.Substring(indice, 1) == " ")
{
indice++;
}
newLigne += " " + ligne.Substring(indice);
}
else
newLigne += " " + ligne.Substring(6);
}
if (newLigne.Length > 132)
{
tamponLigne.Clear();
tamponLigne = decoupeLigne(newLigne);
foreach (String ligne in tamponLigne)
{
sw.WriteLine(ligne);
}
}
else
sw.WriteLine(newLigne);
tamponLigne.Clear();
if (res.Length > 0 && (res.Substring(0, 1) == "c" || res.Substring(0, 1) == "*" || res.Substring(0, 1) == "C"))
res = "!" + res.Substring(1);
lastLigne = res;
}
else
{
if (res.Length > 0 && (res.Substring(0, 1) == "c" || res.Substring(0, 1) == "*" || res.Substring(0,1) == "C"))
res = "!" + res.Substring(1);
if(!first)
sw.WriteLine(lastLigne);
else
first = false;
lastLigne = res;
}
}
if (tamponLigne.Count != 0)
{
String newLigne = lastLigne;
lastLigne = "";
foreach (String ligne in tamponLigne)
{
if (ligne.Substring(6, 1) == " ")
{
int indice = 6;
while (ligne.Substring(indice, 1) == " ")
{
indice++;
}
newLigne += " " + ligne.Substring(indice);
}
else
newLigne += " " + ligne.Substring(6);
}
if (newLigne.Length > 132)
{
tamponLigne.Clear();
tamponLigne = decoupeLigne(newLigne);
foreach (String ligne in tamponLigne)
{
sw.WriteLine(ligne);
}
}
else
sw.WriteLine(newLigne);
tamponLigne.Clear();
}
sw.WriteLine(lastLigne);
tamponLigne.Clear();
sr.Close();
sw.Close();
numberFileDone++;
progressBar1.Value = (numberFileDone / listFiles.Items.Count) * 100;
progressBar1.Update();
}
if (!checkBoxDeleteFile.Checked)
{
foreach (String fileName in listFiles.Items)
{
if (!Directory.Exists(directoryPath(fileName) + "\\Fichier avant conversion"))
{
Directory.CreateDirectory(directoryPath(fileName) + "\\Fichier avant conversion");
}
String temp = directoryPath(fileName) + "\\Fichier avant conversion" + "\\" + fileName.Substring(fileName.LastIndexOf("\\") + 1);
if (File.Exists(directoryPath(fileName) + "\\Fichier avant conversion" + "\\" + fileName.Substring(fileName.LastIndexOf("\\") + 1)))
File.Delete(directoryPath(fileName) + "\\Fichier avant conversion" + "\\" + fileName.Substring(fileName.LastIndexOf("\\") + 1));
File.Move(fileName, directoryPath(fileName) + "\\Fichier avant conversion" + "\\" + fileName.Substring(fileName.LastIndexOf("\\") + 1));
}
}
else
{
foreach (String fileName in listFiles.Items)
{
File.Delete(fileName);
}
}
foreach (String fileName in listFileDone)
{
if (File.Exists(fileName.Substring(0, fileName.Length - 2)))
File.Delete(fileName.Substring(0, fileName.Length - 2));
File.Move(fileName, fileName.Substring(0, fileName.Length - 2));
}
listFiles.Items.Clear();
progressBar1.Value = 0;
progressBar1.Visible = false;
}
}
}
private String directoryPath(String fileName)
{
return fileName.Substring(0,fileName.LastIndexOf("\\"));
}
private String rightName(String name)
{
String newName;
if (checkBoxRemplacer.Checked)
{
if (extension(name) == ".f")
{
newName = name.Substring(0, name.Length - 2)+".f95"+"##";
return newName;
}
if (extension(name) == ".F")
{
newName = name.Substring(0, name.Length - 2) + ".F95" + "##";
return newName;
}
}
return name+"##";
}
private String extension(String name)
{
return name.Substring(name.LastIndexOf('.'));
}
private List<String> decoupeLigne(String ligne)
{
List<String> listLignes = new List<String>();
int indiceDecalage = 0;
while (ligne.Substring(indiceDecalage, 1) == " ")
{
indiceDecalage++;
}
String decalage = "";
for (int i = 0; i < indiceDecalage; i++)
{
decalage += " ";
}
while(ligne.Length > 132) {
char[] tab = ligne.Substring(0,130).ToCharArray();
int indice;
for (indice = 129-indiceDecalage; indice > 0 && (tab[indice] == '.' || Char.IsLetterOrDigit(tab[indice])); indice--) { }
listLignes.Add(ligne.Substring(0, indice)+" &");
ligne = decalage+"& "+ligne.Substring(indice);
}
listLignes.Add(ligne);
return listLignes;
}
Conclusion :
Have fun !
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.