Re: Обробка файлу PHP & Python & Ruby & С++ & Java та багато інших
Delphi (не провіряв вивід, але воно компілюється:)
▼Прихований текст
Компілюється - можливо. Але можете бодай комент підкинути? Бо щось я не вкурив тут...
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → Алгоритми та структури даних, технології → Порівняння мов програмування → Обробка файлу PHP & Python & Ruby & С++ & Java та багато інших
Для відправлення відповіді ви повинні увійти або зареєструватися
Delphi (не провіряв вивід, але воно компілюється:)
▼Прихований текст
Компілюється - можливо. Але можете бодай комент підкинути? Бо щось я не вкурив тут...
C#:
using System;
using System.IO;
public class HelloWorld
{
static public void Main ()
{
try
{
using (StreamReader reader = new StreamReader("t.html"))
{
String line;
while ((line = reader.ReadLine()) != null)
{
String[] items = line.Trim().Split(new Char[] {'\t'});
if (items.Length == 2)
{
Console.WriteLine("Street: " + items[0]);
Console.WriteLine("House: " + items[1]);
Console.WriteLine();
}
}
}
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
}
Output:
Street: вул. Сергія Єфремова
House: 1/2
Street: вул. 100-Р.Червоного Хреста
House: 1
Street: вул. 100-Р.Червоного Хреста
House: 2
Street: вул. 100-Р.Червоного Хреста
House: 3
Street: вул. 100-Р.Червоного Хреста
House: 2в
Street: вул. 2000-Ліття Різдва Христового
House: 4
Street: вул. 24 Серпня
House: 1
Ruby:
counter = 1
file = File.new("t.html", "r")
while (line = file.gets)
lines = line.strip.split("\t")
if (lines.size == 2)
puts "Street: #{line[0]}\nHouse: #{line[1]}\n\n"
end
end
file.close
Output:
Street: вул. Сергія Єфремова
House: 1/2
Street: вул. 100-Р.Червоного Хреста
House: 1
Street: вул. 100-Р.Червоного Хреста
House: 2
Street: вул. 100-Р.Червоного Хреста
House: 3
Street: вул. 100-Р.Червоного Хреста
House: 2в
Street: вул. 2000-Ліття Різдва Христового
House: 4
Street: вул. 24 Серпня
House: 1
Трохи спростив
Ruby:
IO.foreach "t.html" do |line|
lines = line.strip.split("\t")
puts (lines.size == 2) ? "Street: #{line[0]}\nHouse: #{line[1]}\n\n" : ""
end
P.S. Шкода, що end потрібно в кінці конструкцій використовувати.
ADR написав:Delphi (не провіряв вивід, але воно компілюється:)
▼Прихований текстКомпілюється - можливо. Але можете бодай комент підкинути? Бо щось я не вкурив тут...
Так краще?
Bartash написав:ADR написав:Delphi (не провіряв вивід, але воно компілюється:)
▼Прихований текстКомпілюється - можливо. Але можете бодай комент підкинути? Бо щось я не вкурив тут...
Так краще?
Значно ліпше, дякую. Тепер усе стало на місця в голові.
Трохи спростив
Ruby:IO.foreach "t.html" do |line| lines = line.strip.split("\t") puts (lines.size == 2) ? "Street: #{line[0]}\nHouse: #{line[1]}\n\n" : "" end
P.S. Шкода, що end потрібно в кінці конструкцій використовувати.
Скидається на те, що лавровий вінець дістанеться Рубінові у цій задачі:).
оновив тему і додав голосування. Реально рубі тут дивиться елегантно
На Python при бажанні теж можна код скоротити і вийде по кількості рядків як і в Ruby.
Python:
lines = [line.strip().split('\t') for line in open('t.html')]
for line in lines:
print len(line) == 2 and 'Street: ' + line[0] + '\nHouse: ' + line[1] + '\n' or ''
Виведення:
Street: вул. Сергія Єфремова
House: 1/2
Street: вул. 100-Р.Червоного Хреста
House: 1
Street: вул. 100-Р.Червоного Хреста
House: 2
Street: вул. 100-Р.Червоного Хреста
House: 3
Street: вул. 100-Р.Червоного Хреста
House: 2в
Street: вул. 2000-Ліття Різдва Христового
House: 4
Street: вул. 24 Серпня
House: 1
Хоча по кількості символів та кількості конструкцій Ruby всеодно краще.
оновив тему і додав голосування. Реально рубі тут дивиться елегантно
Може, у першому пості теми варто поспойлити розв'язки? Бо повідомлення виходить досить громіздким.
На Python при бажанні теж можна код скоротити і вийде по кількості рядків як і в Ruby.
Ну я не бачу смислу скорочувати код. На мою думку не в кількості рядків суть а в прозорості.
Наприклад ці два куски коду зовсім по різному читаються. Тобто менше конструкцій менше ф-цій викликається а в один рядок багато чого можна написати )) А смисл?
lines = [line.strip().split('\t') for line in open('t.html')]
IO.foreach "t.html" do |line|
lines = line.strip.split("\t")
Погоджуєтесь ?
Якщо уже ганятися за рядками, то більшість мов дозволяє взагалі усе в один рядок написати. Головне розділові знаки не забути.
А взагалі не дивно, що скриптові мови у задачі по обробці тексту виявилися кращими.
А взагалі не дивно, що скриптові мови у задачі по обробці тексту виявилися кращими.
таки так. Це цілком логічно Але побачити реалізацію на інших мовах теж цікаво
Мене, наприклад, в подібних темах цікавить не краще-гірше. А просто побачити реалізації на різних мовах.
Erlang (Erlang/OTP 22 [erts-10.4])
-module(rs).
-compile([export_all, nowarn_export_all]).
%do(FileName) ->
% {ok, File} = file:open(FileName, [read]),
do() ->
{ok, File} = file:open("file.txt", [read]),
do2(File).
do2(File) ->
case io:get_line(File, "") of
eof ->
file:close(File), io:format("all ok!~n",[]);
Line ->
Z = string:split(Line, " \n", all), % second argument also can be [9] , because code of tab-symbol = 9 , so " " =:= [9] equals true, "\n" =:= [10]
do3(Z, 0),
do2(File)
end.
do3([],_) -> ok;
do3([[]|T], N) -> do3(T, N);
do3([H|T], 0) -> w2f(["Street: ", H, "\n"]), do3(T, 1);
do3([H|_T], 1) -> w2f(["House: ", H, "\n\n"]), ok.
w2f(V) -> file:write_file("data2.txt", io_lib:fwrite("~s", [unicode:characters_to_binary(V, utf8, latin1)]), [append]).
compile && run
c(rs).
rs:do().
out:
Street: вул. Сергія Єфремова
House: 1/2Street: вул. 100-Р.Червоного Хреста
House: 1Street: вул. 100-Р.Червоного Хреста
House: 2Street: вул. 100-Р.Червоного Хреста
House: 3Street: вул. 100-Р.Червоного Хреста
House: 2вStreet: вул. 2000-Ліття Різдва Христового
House: 4Street: вул. 24 Серпня
House: 1
upd. ля! форум таб захавав, замінює на пробіли ))
у такому випадку строчку
Z = string:split(Line, " \n", all),
можна замінити на
Z = string:split(Line, [9,10], all),
бо в ерлангу спискові строки -- це просто список кодів символів, ха)
Rust:
use std::fs::File;
use std::io::{BufReader, BufRead};
fn main() {
if let Ok(file) = File::open("buildings.txt") {
for line in BufReader::new(file).lines() {
if let Ok(pair) = line {
let parts : Vec<_> = pair.split('\t')
.collect();
if let [street, house] = parts.as_slice() {
println!("Street: {}\nHouse: {}\n", street, house);
}
}
}
}
}
Результат:
Ще один Rust, за допомогою оператора try (але довелося додати boilerplate для обробки помилок):
use std::fs::File;
use std::io::{BufReader, BufRead};
use std::io::Error;
use std::boxed::Box;
fn main() -> Result<(), Box<Error>> {
let file = File::open("buildings.txt")?;
for line in BufReader::new(file).lines() {
let pair = line?;
let parts : Vec<_> = pair.split('\t')
.collect();
if let [street, house] = parts.as_slice() {
println!("Street: {}\nHouse: {}\n", street, house);
}
}
Ok(())
}
<?php # author @dot $source = fopen(__DIR__ . '/db.txt', 'r'); while (($line = fgetcsv($source, false, "\t")) !== false) { echo count($line) == 2 ? "Street: {$line[0]}\nHouse : {$line[1]}\n\n" : ''; } fclose($source);
▼Прихований текст
Для відправлення відповіді ви повинні увійти або зареєструватися