[JAVA] Schreiben Sie die Zuweisungen der Universität C mit Node.js neu

C ist die erste Computersprache, die Sie an Ihrer Universität lernen. Als ich einen Studenten fragte, den ich kannte, scheint es viele C oder Java zu geben. Es gibt nur wenige Beispiele, aber ... Wie bei mir ist die erste Programmiersprache C. Die Klassen reichen von der grundlegenden Syntax bis zu Zeigerstrukturen. Persönlich habe ich vor kurzem angefangen, mich ernsthaft mit dem Programmieren und Schreiben von Javascript zu beschäftigen, insbesondere mit serverseitigen Node.js. Ich werde nicht auf die Vor- und Nachteile von C-Sprache an der Universität eingehen, aber es wäre sinnvoll, wenn jemand, der C-Sprache in der Schule gelernt hat, diesen Artikel finden und fragen würde: "Kann ich das in Node.js schreiben?" Ich frage mich, ob. Ich hoffe, es wird eine Gelegenheit sein, danach WEB-Apps zu schreiben. (Nun, ich habe es fast launisch geschrieben, also habe ich nur versucht, es als Artikel zu schreiben ...)

Node.js

Sie können mit Google so viele Details abrufen, wie Sie möchten, aber offiziell ist es:

Node.js ist eine JavaScript-Umgebung, die auf der V8-JavaScript-Engine von Chrome ausgeführt wird. Node.js verwendet ein asynchrones ereignisgesteuertes Modell, das leichtgewichtig ist und effizient arbeitet. Node.js Package Management Manager npm ist das größte Open-Source-Bibliotheks-Ökosystem der Welt.

Javascirpt ist eine Sprache, die im Browser ausgeführt wird, aber mit dieser Plattform auch auf der Serverseite ausgeführt werden kann. Darüber hinaus verfügt es über Funktionen wie asynchrone Verarbeitung, ereignisgesteuerten Typ und einzelnen Thread und wird manchmal unter dem Gesichtspunkt der Verarbeitungsgeschwindigkeit bevorzugt. Ich denke, dass genaue Kommentarartikel im Umlauf sind, daher werde ich nicht im Detail erklären. Eine weitere Sache, die hinzugefügt werden muss, ist, dass im Paketmanager npm viele Bibliotheken verfügbar sind und Sie implementieren können, was Sie tun möchten, ohne zu viel Code zu schreiben. Während ich C sprach, dachte ich: "Wenn das so schwierig ist, wäre es enorm, eine App zu entwickeln ...". Wenn es sich jedoch um eine häufig verwendete Sprache handelt, ist die Bibliothek umfangreich und Sie können problemlos verschiedene Aufgaben ausführen. Überraschenderweise weiß ich das nicht und wenn die Programmierung schwierig ist, neige ich dazu, schüchtern zu sein. Überraschenderweise ist es eine Tatsache, dass selbst wenn die Leitung nicht gut ist, dies aufgrund des Missbrauchs von Kopie und Bibliothek nur durch Implementierung erfolgen kann. Natürlich denke ich nicht, dass diese Methode die beste zum Lernen ist. Ob es gut oder schlecht ist, mache etwas, das sich bewegt und gehe zuerst auf die Bühne. Ich denke, das ist eine richtige Antwort, aber ich denke. (Nun ... ich bin kein großer Fan, aber ... einen Artikel zu schreiben ist eines der Dinge, die auf die Bühne gehen.) Das ist alles für Node.js. Wenn Sie den Betrieb überprüfen möchten, installieren Sie den Knoten auf Ihrem PC.

Hauptthema: C-Sprache umschreiben

Ich werde nicht im Detail erklären. Eine Lösung besteht darin, dass Sie dies wie folgt tun können, wenn Sie das gleiche Ergebnis erzielen möchten.

Datei lesen

Ein Programm, das die Datei jinkou.txt liest, der Bevölkerung (Personen) und der Fläche (km2) jeder Präfektur Einheiten hinzufügt und diese auf dem Display ausgibt.

jinkou.txt ist ein einfacher Text mit einem Bevölkerungsbereich von 47 Präfekturen, die wie unten gezeigt durch Tabulatoren getrennt sind.

jinkou.txt


Präfektur Aichi 7254704 5164.06
Präfektur Ehime 1467815 5677.38
Präfektur Ibaraki 2975167 6095.69
Präfektur Okayama 1957264 7113
Präfektur Okinawa 1361594 2275.28
Präfektur Iwate 1385041 15278.77
Präfektur Gifu 2107226 10621.17
.......
 

read-file.c


#include <stdio.h>
#include <stdlib.h>
#include <string.h> 

int main() {
	FILE *fp;
	char pref[256];
	int popu;
	float area;
	
  if((fp = fopen("jinkou.txt", "r")) == NULL) {
    printf("This file can not be opened\n");
    exit(1);
  }

  while (fscanf (fp , "%s", pref) != EOF) {
    fscanf(fp, "%d", &popu);
    fscanf(fp, "%f", &area);
    printf("%10s%10d Leute%10.2fKm2\n", pref, popu, area);
  }

  fclose(fp);
  return area;
}

Ergebnis

Erfolg, wenn es auf der Konsole so angezeigt wird

Kobito.8mrvnq.png

In Node.js

Es ist eine Implementierung, die Stream liest. Ich denke, es gibt viele andere Möglichkeiten.

read-file.js


'use strict';
const fs = require('fs');
const readline = require('readline');
const rs = fs.createReadStream('./jinkou.txt');
const rl = readline.createInterface({ 'input': rs, 'output': {} });

rl.on('line', (lineString) => {
  const columns = lineString.split(' ');
  const pref = columns[0];
  const popu = parseInt(columns[1]);
  const area = parseInt(columns[2]);
  console.log(pref + "\t" + popu + 'Mann' + "\t" + area + 'km2');
});

Dies führt zu ähnlichen Ergebnissen.

Eine Datei schreiben

Ein Programm, das die Bevölkerungsdichte jeder Präfektur zusammen mit dem Präfekturnamen in die Datei mitsudo.txt ausgibt.

write-file.c


#include <stdio.h>
#include <stdlib.h> 

int main(void) {
	FILE *file1, *file2;
	char pref[256];
	int popu;
	float area, mitsudo;
	
  if ((file1 = fopen("jinkou.txt", "r")) == NULL) {
    printf("This file can not be opened\n");
    exit(1);
  }

  if ((file2 = fopen("mitsudo.txt", "w")) == NULL) {
    printf("This file can not be opened\n");
    exit(1);
  }

  while (fscanf (file1 , "%s", pref) != -1) {
    fscanf(file1, "%d", &popu);
    fscanf(file1, "%f", &area);
    mitsudo = (float)popu / area;
    fprintf(file2, "%8s %8.2f Leute/Km2\n", pref, mitsudo);
  }

  fclose(file1);
  fclose(file2);
}

Ergebnis

Wenn misudo.txt wie dieses angezeigt wird, ist es erfolgreich (wie bei jinkou.txt wurde der Dateiname nicht von mir angegeben, also ist es nicht schlecht ...)

Kobito.TJ8Hog.png

In Node.js

write-file.js


'use strict';
const fs = require('fs');
const readline = require('readline');
const rs = fs.createReadStream('./jinkou.txt');
const rl = readline.createInterface({ 'input': rs, 'output': {} });
const map = new Map();

rl.on('line', (lineString) => {
  const columns = lineString.split(' ');
  const pref = columns[0];
  const popu = parseInt(columns[1]);
  const area = parseInt(columns[2]);
  const popu_density = (popu / area).toFixed(2) + 'Mann/km2';
  map.set(pref, popu_density);
});

rl.on('close', () => {
  let data = "";
  map.forEach((value, key) => {
    data += key + '\t' + value + '\n';
  }, map);
  fs.writeFile('./mitsudo.txt', data, ({ encoding: 'utf-8' }), (err) => {
    if (err) throw err;
    console.log('The file has benn saved!');
  });
});

Suchen Sie den Inhalt der Datei

Suchen Sie nach Daten, die mit dem über die Tastatur eingegebenen Präfekturnamen übereinstimmen Programm zur Ausgabe auf dem Display

search-file.c


#include <stdio.h>
#include <stdlib.h> 

int main(void) {
	FILE *file1;
	char pref[50][256], dmy[80], indata[80];
	float mitsudo[50];
	int n = 0, kosuu;
	
  if ((file1 = fopen("jinkou.txt", "r")) == NULL) {
    printf("This file can not be opened\n");
    exit(1);
  }

  while (fscanf (file1 , "%s", pref[n]) != -1) {
    fscanf(file1, "%f", &mitsudo[n]);
    fscanf(file1, "%s", &dmy);
    ++n;
  }
  kosuu = n - 1;

  fclose(file1);
  
  while(indata[0] != 'q') {
    printf("Name der Präfekturen(Beenden Sie mit q)=");
    gets(indata);
    //Suche
    for (n = 0; n <= kosuu; ++n) {
      if (strcmp(pref[n], indata) == 0) {
        printf("%8s %8.2f Leute/Km2\n", pref[n], mitsudo[n]);
      }
    }
  }
}

Ergebnis

Kobito.hhviSj.png

In Node.js

'use strict';
const fs = require('fs');
const readline = require('readline');
const rs = fs.createReadStream('./mitsudo.txt');
const rl = readline.createInterface({ 'input': rs, 'output': {} });
const map = new Map();

rl.on('line', (lineString) => {
  const columns = lineString.split('\t');
  const pref = columns[0];
  const popu_density = columns[1];
  map.set(pref, popu_density);
});

rl.on('close', () => {
  console.log('Bitte geben Sie den Namen der Präfektur ein.(ctrl+Beenden Sie mit c)');
  process.stdin.resume();
  process.stdin.setEncoding('utf8');
  process.stdin.on('data', (data) => {
    let a = data.slice(0, data.length - 1);
    console.log(a + "\t" + map.get(a));
  });
});

Impressionen und Zusammenfassung

Unerwartet konnte ich es nicht so einfach und kurz schreiben ... In Bezug auf die Implementierung sind die Spezifikationen von process.stdin.on () nicht gut verstanden und \ n ist im empfangenen Wert enthalten. Daher bin ich auf den Punkt gestoßen, dass es nicht als Argument für map.get () verwendet werden kann. Ich hatte es schwer. Außerdem habe ich zum ersten Mal einen anderen Artikel wie diesen geschrieben als diesen Bericht. Mir wurde wieder klar, dass mein Schreiben schrecklich überflüssig und lang war. Nun, ich werde weiterhin etwas schreiben, ohne zu denken, dass es die Anzahl der Ausgänge ist.

Empfohlene Unterrichtsmaterialien für Node.js.

Ich habe an der N Preparatory School studiert. Ich finde die sehr leicht verständlichen und höflichen Unterrichtsmaterialien sehr wunderbar. Wenn Sie die Bedeutung des Codes auch nach dem Lesen der offiziellen Dokumente nicht verstehen, empfehlen wir Ihnen, diesen Kurs zu belegen. Schließlich konnte ich mithilfe des Frameworks eine WEB-Anwendung erstellen, sodass mir auch der Inhalt gefallen hat. Ich empfehle Ihnen, es noch einmal zu sagen.

Vorerst

https://github.com/takewell/c2node

Recommended Posts

Schreiben Sie die Zuweisungen der Universität C mit Node.js neu
Java-Sprache aus der Sicht von Kotlin und C #
Bildverarbeitung: Spielen wir mit dem Bild
Android App: Lassen Sie uns den Mechanismus des Bildschirmübergangs mit einfachem Code erklären
Lassen Sie uns das Ergebnis der Analyse von Java-Bytecode in einem Klassendiagramm ausdrücken
Überprüfen Sie den Inhalt der Parameter mit pry
Konvertieren Sie die C-Sprache mit Emscripten in JavaScript
Über die Behandlung von BigDecimal (mit Reflexion)
Formatieren Sie den Inhalt von LocalDate mit DateTimeFormatter
Probieren Sie Designmuster in C-Sprache aus! Erinnerungsmuster - merken wir uns die Speicher der Daten
AndroidStudio Verweisen wir auf C ++ im Modul anderer Projekte (Java / Kotlin).
Durchbrechen Sie gewaltsam das C-Problem "* 3 oder / 2" von [AtCoder Problem-ABC100] mit Java [Code]